C# 在Cortana后台任务中设置剪贴板内容
我试图在后台任务中将内容添加到剪贴板,但无法使其正常工作。这是我的密码:C# 在Cortana后台任务中设置剪贴板内容,c#,uwp,cortana,C#,Uwp,Cortana,我试图在后台任务中将内容添加到剪贴板,但无法使其正常工作。这是我的密码: var dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Copy }; dataPackage.SetText("EUREKA!"); Clipboard.Flush(); Clipboard.SetContent(dataPackage); 我收到错误消息: 不支持从MTA激活单线程类 (来自HRESULT:0x8000
var dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Copy };
dataPackage.SetText("EUREKA!");
Clipboard.Flush();
Clipboard.SetContent(dataPackage);
我收到错误消息:
不支持从MTA激活单线程类
(来自HRESULT:0x800001D的异常)系统。异常
{System.Runtime.InteropServices.COMException}
我找到了一个解决方案,但建议的解决方案是:
private async Task CopyToClipboard(string strText)
{
CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
await dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
var dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Copy };
dataPackage.SetText("EUREKA!");
Clipboard.SetContent(dataPackage);
getText();
});
}
private async void getText()
{
string t = await Clipboard.GetContent().GetTextAsync();
}
抛出System.NullReferenceException第一条错误消息非常清楚。剪贴板需要STA线程。对于由C++(您的案例)或C++开发的应用程序,后台任务托管在一个在PROC DLL中(由应用程序或专用的BeaBeaTaskHoo.exe加载),其在<强> MTA中。p> 有两种情况:
Cortana的BackgroundTaskHost可能永远无法访问可用于分派到UI线程的CoreWindow,因为它从不绘制自己的UI(它只能向Cortana发送请求以代表自己完成)。你需要激活你的应用程序,让它操纵它的CoreWindow,把一些东西放到剪贴板上。