我正在尝试在后台任务中向剪贴板添加内容,但我无法让它工作。这是我的代码:
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
答案 0 :(得分:2)
第一条错误信息非常清楚。剪贴板需要 STA 线程。对于由c#(您的案例)或c ++开发的应用程序,后台任务托管在 MTA 中的进程内DLL(由应用程序加载或专用的BackgroundtaskHost.exe)中。
有两种情况:
Forefront应用程序处于运行模式: coredispatcher可用于请求UI STA线程执行操作。
Forefront app暂停或终止: 后台任务(当用c#和c ++编写的应用程序时)总是以MTA模式运行,并且UI STA线程不存在,因此如果该类不支持从MTA激活,我们就不能在后台任务中使用剪贴板。
所以记住这一点:
后台任务共享状态的唯一可靠方法是使用持久存储,例如ApplicationData或文件。