3

我想使用:

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

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

但我无法编译它,因为

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

没有定义。

我不能包括#include <winrt/Microsoft.System.h>哪个包含 DispatcherQueue 类。

我的环境:
Windows 10 Pro、21H1、19043.1083
Visual Studio Community 2019 (16.10.3)
Visual Studio 扩展:Project Reunion 版本 0.8.0.46122163
项目模板:C++、Blank App、打包(WinUI 3 in Desktop)

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

应用程序.xaml.h

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

应用程序.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):错误 C2039:“resume_foreground”:不是“winrt”的成员
1>D:\Solution\WinUi3 Test\WinUi3 Test\MainWindow.xaml.h(23): message : see declaration of 'winrt'
1>D:\Solution\WinUi3 Test\WinUi3 Test\App.xaml.cpp(50,38): 错误 C3861: 'resume_foreground': 找不到标识符
1>完成构建项目“WinUi3 Test.vcxproj”——失败。

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

1>D:\Solution\WinUi3 Test\WinUi3 Test\pch.h(25,10): 致命错误 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': 2 个重载都不能转换所有参数类型
1>D:\Solution\WinUi3 Test\WinUi3 Test\Generated Files\winrt\Windows.UI.Core.h(2805,31): 消息:可能是 'winrt::resume_foreground::awaitable winrt::resume_foreground(const winrt ::Windows::UI::Core::CoreDispatcher &,const winrt::Windows::UI::Core::CoreDispatcherPriority) noexcept' (编译源文件 App.xaml.cpp)
1>D:\Solution\WinUi3 Test\WinUi3 Test\Generated Files\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::Dispatching::DispatcherQueue)'
1>完成构建项目“WinUi3 Test.vcxproj”——失败。
4

2 回答 2

1

包括

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

从 0.8.0 预览版更新到 0.8.0 时,命名空间从 Microsoft.System到更改Microsoft.UI.Dispatchingresume_foreground现在在Microsoft.UI.Dispatching.co_await.h.

于 2021-07-14T13:00:40.707 回答
1

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());
于 2022-01-04T18:37:27.473 回答