[英]Undebuggable non-deterministic heisenbug in single-threaded C++ function call
[英]How can I call a function in C++ when I get the WinRT/UWP error 'Activating a single-threaded class from MTA is not supported?'
嘗試從“錯誤”線程( 例如 Clipboard::SetContent(...)
)調用單線程單元(STA)函數時,我看到以下消息:
不支持從MTA激活單線程類。
哪些功能是STA尚不清楚,因此似乎只是從看上去無害的功能中跳出來了。 我找不到簡單的答案來解釋修復它的步驟。 Windows COM文檔很難遵循。
如何才能可靠地確定什么是STA功能以防止發生此錯誤? 有沒有簡單的解決方法?
問題在於您當前正在運行的線程是MTA(多線程單元),並且不支持STA調用。
解決方法是從始終是STA的main / UI線程分派調用,因此支持STA調用。
首先,使用MainView->CoreWindow
獲取所需的線程,然后調用該線程的調度程序以調用您要運行的任何線程。 例如:
using namespace Windows::UI::Core;
using namespace Windows::ApplicationModel::Core;
using namespace Windows::ApplicationModel::DataTransfer;
CoreWindow^ window = CoreApplication::MainView->CoreWindow;
window->Dispatcher->RunAsync(CoreDispatcherPriority::Normal,
ref new DispatchedHandler
(
[wstringForClipboard]
{
DataPackage^ clipboardInfo = ref new DataPackage;
clipboardInfo->SetText(ref new Platform::String(wstringForClipboard.c_str()));
Clipboard::SetContent(clipboardInfo);
}
)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.