COM と STA/MTA に関する多くの質問がありますが (例:ここ)、そのほとんどは UI を備えたアプリケーションに関するものです。ただし、次の設定があります。
- デフォルトでマルチスレッド アパートメントであるコンソール アプリケーション (Main() には明示的に
[MTAThread]
属性があります)。 - メイン スレッドは、いくつかのワーカー スレッドを生成します。
- メイン スレッドは、シングル スレッドの COM オブジェクトをインスタンス化します。
- メイン スレッドは、ユーザーが「q」を押すまで Console.ReadLine() を呼び出します。その後、アプリケーションは終了します。
いくつかの質問:
- COM オブジェクトのメッセージ ポンプの必要性について言及している箇所は数多くあります。この質問が示唆するように、メイン スレッドのメッセージ ポンプを手動で作成する必要がありますか、それとも CLR が新しい STA スレッドでメッセージ ポンプを作成しますか?
- 念のために言っておきますが、CLR が必要な配管を自動的に作成すると仮定すると、明示的な同期を必要とせずに任意のワーカー スレッドから COM オブジェクトを使用できますか?
- 性能面で優れているのは次のうちどれですか。
- COM オブジェクトとの間のマーシャリングは CLR に任せます。
- 別の STA スレッドでオブジェクトを明示的にインスタンス化し、他のスレッドに
ConcurrentQueue
.