You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3调用DataTransferManager分享窗口触发后台调用COMException

解决WinUI3调用DataTransferManager.ShowShareUI触发后台状态COMException的问题

核心问题分析

这个错误本质是WinUI3桌面应用(非UWP打包的纯桌面场景)调用DataTransferManager时,系统底层无法正确关联当前窗口的前台状态——即便视觉上应用处于前台,窗口句柄与分享服务的绑定逻辑仍存在偏差。

可行修复方案

1. 正确绑定窗口句柄与DataTransferManager

放弃依赖ApplicationView.GetCurrentView(),直接获取WinUI窗口的HWND,通过DataTransferManagerInterop完成窗口关联:

using Windows.ApplicationModel.DataTransfer;
using Windows.Win32;
using Windows.Win32.UI.Shell;

private void ShareButton_Click(object sender, RoutedEventArgs e)
{
    // 获取当前WinUI窗口的HWND
    var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
    
    // 绑定到当前窗口的DataTransferManager实例
    var dtm = PInvoke.DataTransferManagerInterop.GetForWindow(hwnd);
    
    // 必须注册DataRequested事件(否则分享窗口会因无内容异常)
    dtm.DataRequested += Dtm_DataRequested;
    
    dtm.ShowShareUI();
}

private void Dtm_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    // 设置分享内容示例
    args.Request.Data.Properties.Title = "WinUI3应用分享";
    args.Request.Data.SetText("这是来自WinUI3桌面应用的测试分享内容");
    
    // 完成后注销事件,避免内存泄漏
    sender.DataRequested -= Dtm_DataRequested;
}

2. 强制在UI线程执行调用

如果之前的DispatcherQueue调用方式不严谨,改用WinUI窗口自带的Dispatcher确保操作在UI线程执行:

await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
    var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
    var dtm = PInvoke.DataTransferManagerInterop.GetForWindow(hwnd);
    dtm.DataRequested += Dtm_DataRequested;
    dtm.ShowShareUI();
});

3. 检查应用配置细节

  • 若为打包应用:在Package.appxmanifest的「功能」标签下勾选「共享用户内容」,确保系统识别应用的分享权限
  • 若为未打包应用:确认已正确安装Windows App SDK Runtime,且项目引用的Microsoft.WindowsAppSDK NuGet包版本与.NET 8兼容

常见误区排查

  • 禁止在后台线程调用ShowShareUI,线程上下文错误会导致系统误判应用状态
  • 每次分享都要绑定当前窗口的DataTransferManager实例,不要复用全局实例
  • 必须注册DataRequested事件,无分享内容会导致窗口异常触发状态错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:12:12