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.System
到 Microsoft.UI.Dispatching
和 resume_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());
我想使用:
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.System
到 Microsoft.UI.Dispatching
和 resume_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());