2つのCOMコンポーネントを使用してWinformsアプリケーションを構築しようとしています。ただし、コンポーネントの1つは使用時にのみ機能し、もう1つは。[MTAThread]
でのみ機能し[STAThread]
ます。
推奨される解決策は何でしょうか?
2つのCOMコンポーネントを使用してWinformsアプリケーションを構築しようとしています。ただし、コンポーネントの1つは使用時にのみ機能し、もう1つは。[MTAThread]
でのみ機能し[STAThread]
ます。
推奨される解決策は何でしょうか?
Windowsフォームでは、メインのエントリポイントに[STAThread]が存在する必要があります。シングルスレッドのアパートの状態でのみ動作します。WindowsフォームのUIスレッドでSTACOMオブジェクトを問題なく使用できます。
このための一般的なアプローチは、独自のスレッドを作成し、別のスレッドのThread.ApartmentStateをMTA(これはデフォルトですが)に設定することです。このスレッド内からMTAスレッドCOMコンポーネントを初期化して使用します。
ThreadStart threadEntryPoint = ...;
var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA; // set this before you call Start()!
thread.Start();