WinForms:1つのCOMオブジェクトにはStathReadが必要で、もう1つはmtathreadが必要です。どうすればそれらを使用できますか?

StackOverflow https://stackoverflow.com/questions/1521816

質問

2つのCOMコンポーネントを使用してWinFormsアプリケーションを構築しようとしています。ただし、コンポーネントの1つは使用する場合にのみ機能します [MTAThread] そして、他の人は一緒に機能します [STAThread].

推奨されるソリューションは何でしょうか?

役に立ちましたか?

解決

Windowsフォームでは、[Stathread]がメインエントリポイントに存在する必要があります。単一のスレッドアパートメント状態でのみ機能します。 WindowsフォームのUIスレッドでSTA COMオブジェクトを使用できますが、問題はありません。

これに対する典型的なアプローチは、独自のスレッドを作成し、 thread.apartmentState 個別のスレッドのMTA(これはデフォルトですが)。このスレッド内からMTAスレッドCOMコンポーネントを初期化して使用します。

ThreadStart threadEntryPoint = ...;

var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA;  // set this before you call Start()!
thread.Start();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top