我有一个使用 C++ WinRT DLL 的 C# 程序。C# 程序创建公共 WinRT 类 Foo 的实例,该实例在内部尝试实例化未声明为公共的第二个 WinRT 类 Bar 的对象。在 Bar 类上调用“ref new”时,它会抛出一个异常,提示“不支持从 MTA 激活单线程类”。
如何将 Bar 类配置为在 MTA 样式的线程应用程序中工作?它是按类还是 DLL 范围的设置?
我有一个使用 C++ WinRT DLL 的 C# 程序。C# 程序创建公共 WinRT 类 Foo 的实例,该实例在内部尝试实例化未声明为公共的第二个 WinRT 类 Bar 的对象。在 Bar 类上调用“ref new”时,它会抛出一个异常,提示“不支持从 MTA 激活单线程类”。
如何将 Bar 类配置为在 MTA 样式的线程应用程序中工作?它是按类还是 DLL 范围的设置?
它是每个类的行为,由属性ThreadingModel
和MarshallingBehavior
. 有关详细信息,请参阅 MSDN - 线程和编组。
用法是这样的:
using namespace Windows::Foundation::Metadata;
using namespace Platform;
[Threading(ThreadingModel=ThreadingModel::STA]
[MarshalingBehavior(MarshalingType=MarshalingType::None)]
public ref class MySTAClass
{
};