You need to enable JavaScript to run this app. WinUI3桌面C++项目调用winrt::resume_foreground编译失败求助
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3桌面C++项目调用winrt::resume_foreground编译失败求助

问题根因

WinUI 3桌面项目中winrt::Microsoft::UI::Xaml::Window返回的DispatcherQueue属于winrt::Microsoft::UI::Dispatching命名空间,和UWP生态下Windows.System命名空间的旧版DispatcherQueue、Windows.UI.Core命名空间的CoreDispatcher属于完全不同的类型。你之前引入的头文件仅提供了旧类型对应的resume_foreground重载,无法匹配WinUI 3的新DispatcherQueue类型。另外不存在winrt/Microsoft.System.h这个头文件,所以包含后会触发找不到文件的报错。

解决方案
  • 在项目的预编译头文件pch.h中添加对应命名空间的头文件引用:
#include <winrt/Microsoft.UI.Dispatching.h>
  • 重新编译项目即可,此时winrt::resume_foreground会自动匹配winrt::Microsoft::UI::Dispatching::DispatcherQueue类型的入参,你原有代码无需修改即可正常运行。
旧版本兼容方案

如果你使用的Project Reunion 0.8版本仍不支持该重载,可直接用TryEnqueue替代resume_foreground实现调度逻辑,效果一致:

winrt::Windows::Foundation::IAsyncAction App::foo()
{
    // 假设此处为后台线程执行的逻辑
    co_await winrt::resume_background();
    
    auto dispatcher = window.DispatcherQueue();
    dispatcher.TryEnqueue([=]()
    {
        // 此处编写需要在UI线程执行的逻辑
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:00:02