2

C ++ WinRT DLLを使用するC#プログラムがあります。C#プログラムは、パブリックと宣言されていない2番目のWinRTクラスバーのオブジェクトを内部的にインスタンス化しようとするパブリックWinRTクラスFooのインスタンスを作成します。Barクラスで「refnew」を呼び出すと、「MTAからのシングルスレッドクラスのアクティブ化はサポートされていません」という例外がスローされます。

MTAスタイルのスレッド化されたアプリケーションで機能するようにBarクラスを構成するにはどうすればよいですか?クラスごとの設定ですか、それともDLL全体の設定ですか?

4

1 に答える 1

3

これはクラスごとの動作であり、属性ThreadingModelとによって制御されますMarshallingBehavior。詳細については、MSDNを参照してください- スレッド化とマーシャリング

使用法は次のようになります。

using namespace Windows::Foundation::Metadata;
using namespace Platform;

[Threading(ThreadingModel=ThreadingModel::STA]
[MarshalingBehavior(MarshalingType=MarshalingType::None)] 
public ref class MySTAClass
{
}; 
于 2012-11-12T21:41:16.090 に答える