WinForms:1つのCOMオブジェクトにはStathReadが必要で、もう1つはmtathreadが必要です。どうすればそれらを使用できますか?
-
19-09-2019 - |
質問
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();
所属していません StackOverflow