You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3中关闭WindowEx窗口时触发InvalidOperationException异常

WinUI 3非打包应用关闭崩溃问题分析与解决

问题原因

用Template Studio for WinUI生成的WinUI3(v1.2)非打包桌面应用,关闭时崩溃的核心原因是窗口引用未正确释放:

  • 非打包WinUI3应用的窗口生命周期管理逻辑和打包应用不同,系统在窗口关闭时会自动回收相关资源。
  • Template Studio生成的默认代码中,App.xaml.cs会通过全局变量持有主窗口的引用,窗口关闭时这个引用未被及时释放,导致系统回收资源时出现未处理的访问异常,触发App.g.i.cs中的断点逻辑。

解决方法

方法1:主动释放窗口引用

  1. 打开项目的App.xaml.cs文件
  2. 找到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:15:29