在Cortana后台任务中设置剪贴板内容

时间:2015-10-06 02:32:55

标签: c# uwp cortana

我正在尝试在后台任务中向剪贴板添加内容,但我无法让它工作。这是我的代码:

Math

我收到错误消息:

  

不支持从MTA激活单线程类   (来自HRESULT的异常:0x8000001D)System.Exception   {System.Runtime.InteropServices.COMException}

我找到了similar question with a Notification and not Cortana但建议的解决方案:

var dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Copy };
dataPackage.SetText("EUREKA!");
Clipboard.Flush();
Clipboard.SetContent(dataPackage);

引发System.NullReferenceException

1 个答案:

答案 0 :(得分:2)

第一条错误信息非常清楚。剪贴板需要 STA 线程。对于由c#(您的案例)或c ++开发的应用程序,后台任务托管在 MTA 中的进程内DLL(由应用程序加载或专用的BackgroundtaskHost.exe)中。

有两种情况:

  1. Forefront应用程序处于运行模式: coredispatcher可用于请求UI STA线程执行操作。

  2. Forefront app暂停或终止: 后台任务(当用c#和c ++编写的应用程序时)总是以MTA模式运行,并且UI STA线程不存在,因此如果该类不支持从MTA激活,我们就不能在后台任务中使用剪贴板。

  3. 所以记住这一点:

      

    后台任务共享状态的唯一可靠方法是使用持久存储,例如ApplicationData或文件。