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

WinUI3调用Application().Current().Exit()崩溃问题排查与解决

WinUI3 按钮退出应用报错的原因及解决方法

问题重现

用户编写的按钮点击事件代码:

void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    winrt::Microsoft::UI::Xaml::Application().Current().Exit();
}

点击按钮后触发错误,调用栈如下:

KernelBase.dll!00007ff997994ffc()   Unknown
    [External Code] 
>   Example.exe!winrt::throw_hresult(const winrt::hresult result) Line 5016 C++
    Example.exe!winrt::check_hresult(const winrt::hresult result) Line 5087 C++
    Example.exe!winrt::impl::consume_Microsoft_UI_Xaml_IApplicationFactory<winrt::Microsoft::UI::Xaml::IApplicationFactory>::CreateInstance(const winrt::Windows::Foundation::IInspectable & baseInterface, winrt::Windows::Foundation::IInspectable & innerInterface) Line 144 C++
    Example.exe!winrt::Microsoft::UI::Xaml::Application::{ctor}::__l2::<lambda>(const winrt::Microsoft::UI::Xaml::IApplicationFactory & f) Line 12262   C++
    Example.exe!winrt::impl::call_factory<winrt::Microsoft::UI::Xaml::Application,winrt::Microsoft::UI::Xaml::IApplicationFactory,winrt::Microsoft::UI::Xaml::Application <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationFactory &)>(winrt::Microsoft::UI::Xaml::Application::{ctor}::__l2::winrt::Microsoft::UI::Xaml::Application <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationFactory &) && callback) Line 6397    C++
    Example.exe!winrt::Microsoft::UI::Xaml::Application::Application() Line 12262   C++
    Example.exe!winrt::Example::implementation::MainWindow::myButton_Click(const winrt::Windows::Foundation::IInspectable & __formal, const winrt::Microsoft::UI::Xaml::RoutedEventArgs & __formal) Line 35 C++
    [External Code] 
    Example.exe!winrt::impl::delegate<winrt::Microsoft::UI::Xaml::RoutedEventHandler,void <lambda>(const winrt::Windows::Foundation::IInspectable &, const winrt::Microsoft::UI::Xaml::RoutedEventArgs &)>::Invoke(void * sender, void * e) Line 4838   C++
    [External Code] 
    Example.exe!winrt::impl::consume_Microsoft_UI_Xaml_IApplicationStatics<winrt::Microsoft::UI::Xaml::IApplicationStatics>::Start(const winrt::Microsoft::UI::Xaml::ApplicationInitializationCallback & callback) Line 158 C++
    Example.exe!winrt::Microsoft::UI::Xaml::Application::Start::__l2::<lambda>(const winrt::Microsoft::UI::Xaml::IApplicationStatics & f) Line 12270    C++
    Example.exe!winrt::impl::factory_cache_entry<winrt::Microsoft::UI::Xaml::Application,winrt::Microsoft::UI::Xaml::IApplicationStatics>::call<void <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationStatics &) &>(winrt::Microsoft::UI::Xaml::Application::Start::__l2::void <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationStatics &) & callback) Line 6379    C++
    Example.exe!winrt::impl::call_factory<winrt::Microsoft::UI::Xaml::Application,winrt::Microsoft::UI::Xaml::IApplicationStatics,void <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationStatics &)>(winrt::Microsoft::UI::Xaml::Application::Start::__l2::void <lambda>(const winrt::Microsoft::UI::Xaml::IApplicationStatics &) && callback) Line 6402   C++
    Example.exe!winrt::Microsoft::UI::Xaml::Application::Start(const winrt::Microsoft::UI::Xaml::ApplicationInitializationCallback & callback) Line 12271   C++
    [External Code] 

错误原因

从调用栈可以看出,代码中winrt::Microsoft::UI::Xaml::Application()是新建了一个Application实例,而非获取当前运行的应用实例。WinUI3中Application是单例模式,运行时不允许重复创建实例,强行创建会触发异常。

解决方法

直接通过静态方法获取当前已存在的Application实例,修改后的代码如下:

void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    winrt::Microsoft::UI::Xaml::Application::Current().Exit();
}

核心变化是去掉Application()的构造调用,改用Application::Current()获取当前应用实例,再调用Exit()即可正常退出应用。


内容的提问来源于stack exchange,提问作者yonutix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:14:50