2017-10-12 304 views
0

當試圖調用一個單線程公寓從「錯誤」的線程(Clipboard::SetContent(...)),我看到以下消息(STA)功能:當我得到WinRT/UWP錯誤時,如何在C++中調用函數「不支持從MTA激活單線程類?」

激活單線程類從MTA是不支持。

不清楚哪些功能是STA,所以它似乎只是從看似無辜的功能中跳出來。我無法找到解釋解決問題的步驟的簡單答案。 Windows COM文檔很難遵循。

如何可靠地識別什麼是STA功能以防止此錯誤?是不是有一個簡單的修復?

+1

Quote:「這個類不是敏捷的,這意味着你需要考慮它的線程模型和編組行爲,更多信息請參見...」。也許它聽起來很糟糕,但過了一段時間,你會看到文檔和異常之間的聯繫。通過「看見」說明中的鏈接,告訴你該怎麼做。 –

+0

是的,我仔細研究了下面的答案。增加這個問題的意思是讓其他人在踏上STA/MTA地雷時留下那些創傷。 –

回答

0

問題是您當前正在運行的線程是MTA(多線程單元),並且不支持STA調用。

修復方法是從主/ UI線程調度呼叫,該線程總是STA,因此支持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); 
     } 
    ) 
); 
+0

如果您已解決了您的問題,請將其標記爲稍後訪問此主題的方便的人員接受,謝謝理解。 –

相關問題