簡體   English   中英

當我收到WinRT / UWP錯誤“不支持從MTA激活單線程類”時,如何在C ++中調用函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM