繁体   English   中英

在 WinUI 3 中关闭 WindowEx 窗口时出现 InvalidOperationException

[英]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属性设置为nullstring.Empty"" (模板默认设置PersistenceId = "MainWindow" )。 只需添加

    var manager = WinUIEx.WindowManager.Get(MainWindow);
    manager.PersistenceId = string.Empty;

MainWindow被实例化之后的某个地方(我把它放在App.OnLaunched中)。 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM