繁体   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