WinUi3 Application().Current().Exit()崩溃

问题描述 投票:0回答:1

我试图在按下按钮时退出一个简单的 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] 
uwp winui-3 c++-winrt
1个回答
0
投票

问题确实出在提供的代码中。这是带注释的版本:

void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    winrt::Microsoft::UI::Xaml::Application().Current().Exit();
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^                  namespace
//                              ^^^^^^^^^^^     type name
//                                         ^^   c'tor call
}

这会尝试调用

Application
c'tor。然而,
Application
是一个singleton,并且对工厂对象的
CreateInstace()
调用最终会失败,因为应用程序已经存在。

但这不是代码的目标。它的作者打算访问当前应用程序的

Application
对象。这作为静态
Current
属性公开。 C++/WinRT 将其建模为
Application
类型
Application::Current()
上的静态类成员。

以下为修正版本:

void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
    winrt::Microsoft::UI::Xaml::Application::Current().Exit();
}
© www.soinside.com 2019 - 2024. All rights reserved.