WinUI3/Desktop/C++:无法编译 winrt::resume_foreground(Microsoft::System::DispatcherQueue const& dispatcher)

WinUI3/Desktop/C++: Can't compile winrt::resume_foreground(Microsoft::System::DispatcherQueue const& dispatcher)

我想使用:

co_await winrt::resume_foreground(window.DispatcherQueue());

(“window”的类型是:“winrt::Microsoft::UI::Xaml::Window”)

但是我无法编译它因为

winrt::resume_foreground(Microsoft::System::DispatcherQueue const& dispatcher)

未定义。

我不能包含包含 DispatcherQueue class.

#include <winrt/Microsoft.System.h>

我的环境:
Windows 10 专业版, 21H1, 19043.1083
Visual Studio 社区 2019 (16.10.3)
Visual Studio 扩展:Project Reunion 版本 0.8.0.46122163
项目模板:C++,空白应用程序,打包(WinUI 3 in Desktop)

为了重现错误,我使用了上面的项目模板并将以下方法添加到“App”class。

App.xaml.h

winrt::Windows::Foundation::IAsyncAction foo();

App.xaml.cpp

winrt::Windows::Foundation::IAsyncAction App::foo()
{
    co_await winrt::resume_foreground(window.DispatcherQueue());
}

我收到错误消息:

D:\Solution\WinUi3 Test\WinUi3 Test\App.xaml.cpp(50,21): error C2039: 'resume_foreground': 不是 'winrt' 的成员
1>D:\Solution\WinUi3 Test\WinUi3 Test\MainWindow.xaml.h(23): 消息:参见 'winrt' 的声明
1>D:\Solution\WinUi3 Test\WinUi3 Test\App.xaml.cpp(50,38): error C3861: 'resume_foreground': 找不到标识符
1> 完成构建项目 "WinUi3 Test.vcxproj" -- 失败。

如果我尝试包含 #include <winrt/Microsoft.System.h>,我会得到:

1>D:\Solution\WinUi3 Test\WinUi3 Test\pch.h(25,10): fatal error C1083: 无法打开包含文件: 'winrt/Microsoft.System.h': 没有那个文件或目录
1> 完成构建项目 "WinUi3 Test.vcxproj" -- 失败。

如果我包括 #include <winrt/Windows.System.h>#include <winrt/Windows.UI.Core.h> 我得到:

1>D:\Solution\WinUi3 Test\WinUi3 Test\App.xaml.cpp(50,63): error C2665: 'winrt::resume_foreground': none of the 2 overloads could转换所有参数类型
1>D:\Solution\WinUi3 Test\WinUi3 Test\Generated Files\winrt\Windows.UI.Core.h(2805,31): message : could be 'winrt::resume_foreground::awaitable winrt::resume_foreground(const winrt::Windows::UI::Core::CoreDispatcher &,const winrt::Windows::UI::Core::CoreDispatcherPriority) noexcept' (compiling source file App.xaml.cpp)
1>D:\Solution\WinUi3Test\WinUi3Test\GeneratedFiles\winrt\Windows.System.h(4529,31):message:or'winrt::resume_foreground::awaitable winrt::resume_foreground(const winrt::Windows::System::DispatcherQueue &,const winrt::Windows::System::DispatcherQueuePriority) noexcept'(编译源文件App.xaml.cpp)
1>D:\Solution\WinUi3 Test\WinUi3 Test\App.xaml.cpp(50,63): 消息:尝试匹配参数列表时 '(winrt::Microsoft::UI::调度::DispatcherQueue)'
1> 完成构建项目 "WinUi3 Test.vcxproj" -- 失败。

包括

#include <winrt/Microsoft.UI.Dispatching.h>
#include <Microsoft.UI.Dispatching.co_await.h>

从 0.8.0 预览版更新到 0.8.0 时,命名空间从 Microsoft.SystemMicrosoft.UI.Dispatchingresume_foreground 现在在 Microsoft.UI.Dispatching.co_await.h 中定义。

Markus 的回答在 WinUI3 1.0 版本中对我不起作用,因为 Microsoft.UI.Dispatching.co_await.h 头文件不存在。但是,以下内容确实有效:

#include <wil/cppwinrt.h>
#include <wil/cppwinrt_helpers.h>

co_await wil::resume_foreground(DispatcherQueue());