2

2つのCOMコンポーネントを使用してWinformsアプリケーションを構築しようとしています。ただし、コンポーネントの1つは使用時にのみ機能し、もう1つは。[MTAThread]でのみ機能し[STAThread]ます。

推奨される解決策は何でしょうか?

4

1 に答える 1

4

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();
于 2009-10-05T19:13:01.070 に答える