WinUI 3中关闭WindowEx窗口时触发InvalidOperationException异常
WinUI 3非打包应用关闭崩溃问题分析与解决
问题原因
用Template Studio for WinUI生成的WinUI3(v1.2)非打包桌面应用,关闭时崩溃的核心原因是窗口引用未正确释放:
- 非打包WinUI3应用的窗口生命周期管理逻辑和打包应用不同,系统在窗口关闭时会自动回收相关资源。
- Template Studio生成的默认代码中,
App.xaml.cs会通过全局变量持有主窗口的引用,窗口关闭时这个引用未被及时释放,导致系统回收资源时出现未处理的访问异常,触发App.g.i.cs中的断点逻辑。
解决方法
方法1:主动释放窗口引用
- 打开项目的
App.xaml.cs文件 - 找到
OnLaunched方法中初始化主窗口的代码,添加窗口关闭事件处理,主动释放全局引用:
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { _window = new MainWindow(); // 添加以下代码 _window.Closed += (sender, e) => { _window = null; // 窗口关闭时释放引用 }; _window.Activate(); }
方法2:移除全局窗口引用
如果项目不需要全局持有窗口实例,可以直接将App.xaml.cs中的全局_window变量改为局部变量:
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { var window = new MainWindow(); window.Activate(); }
方法3:升级WinUI3版本
WinUI3 v1.2存在部分非打包应用的已知问题,升级到v1.3及以上版本可修复此类资源回收异常:
- 在NuGet包管理器中,更新
Microsoft.UI.Xaml到最新稳定版。
注:禁用
DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION只是隐藏了断点提示,并未解决根本问题,必须通过上述方法修复资源释放逻辑。
内容的提问来源于stack exchange,提问作者aturnbul
相关产品推荐
相关产品推荐

