.NET アプリケーションで、サードパーティの ActiveX コントロールを使用してデバイスに接続しています。このコンポーネントには UI がないため、Windows アプリ、コンソール アプリ、または Windows サービスから使用できます。問題は、アプリケーションの種類によって動作が異なることです。
コンソール アプリケーション (または Windows サービス) からの使用:
- ThreadPool を使用してコンポーネント メソッドを呼び出します。つまり、メイン スレッド以外のスレッドで呼び出します。
- メソッドは同じスレッドで実行されます。(予想通り)
- メソッドのコールバックは同じスレッドで実行されています。(予想通り)
ただし、Windows アプリケーションから使用する場合:
- つまり、UI スレッド以外のスレッドで、ThreadPool を使用してコンポーネント メソッドを呼び出します。--> この時点で、ActiveX コントロールは UI スレッドに変更されたようです。
- メソッドは UI スレッドで実行されます (UI のブロックが表示されます!)
- メソッド コールバックは UI スレッドで実行されています。
UI以外のスレッドで呼び出しが実行されるように、コンポーネントを分離する方法はありますか?
ありがとう!