![](/img/trans.png)
[英]InvalidOperationException on Winforms Calling Base.Dispose() when closing window
[英]InvalidOperationException when closing a WindowEx window in WinUI 3
最近,我使用Template Studio for WinUI创建了一个新的WinUI 3 (v1.2) 桌面应用程序。 因为在Debug
中启动未打包的应用程序比打包的应用程序快得多,所以我在设置向导中选择了一个未打包的应用程序。 生成的准系统代码创建了一个应用程序,该应用程序在使用Close
方法或System Menu
上的Close
按钮关闭时总是崩溃。
该应用程序抛出一个未处理的异常, VS 2022
在以下部分的App.gics中捕获该异常:
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
};
#endif
您可以通过在项目Properties
(在Build -> Conditional compilation symbols下)中设置DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
变量来禁用此功能,但程序仍会抛出错误(此代码只是为您提供了一种捕获意外错误的便捷方法)。
任何人都可以解释为什么未修改的新项目会发生这种情况以及如何纠正它吗?
模板代码生成一个属于WindowEx
MainWindow
Window
类的这个漂亮扩展添加了很多有用的功能(请参阅: WinUIEx Wiki ),但其中一些功能尚未完全记录。 WindowEx
类创建一个WinUIEx.WindowManager
来管理WindowEx
窗口。 当WindowEx
关闭时,调用 WinUIEx.WindowManager.Window_Closed( WinUIEx.WindowManager.Window_Closed()
,然后调用WinUIEx.WindowManager.SavePersistence()
,这是上述崩溃的原因。
SavePersistence()
尝试保存一些窗口特征,以便在应用程序重新启动时可以恢复它们。 但是,持久性服务仅针对打包的应用程序启用,而不是未打包的(我使用过)。 要关闭此行为,请将WinUIEx.WindowManager
实例的PersistenceId
属性设置为null
、 string.Empty
或""
(模板默认设置PersistenceId = "MainWindow"
)。 只需添加
var manager = WinUIEx.WindowManager.Get(MainWindow);
manager.PersistenceId = string.Empty;
在MainWindow
被实例化之后的某个地方(我把它放在App.OnLaunched
中)。 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.