スレッド処理に関する考慮事項
COM+ キューコンポーネントレコーダーは、プロセスのマルチスレッド アパートメント (MTA) またはシングルスレッド アパートメント (STA) で実行できます。 STA でレコーダーを実行する場合、COM+ では、オブジェクトを含む各アパートメントに、同じプロセス内の他のプロセスおよびアパートメントからの呼び出しを処理するための メッセージ キュー キューが必要です。 つまり、スレッドの作業関数にはメッセージ ループが必要です。 キューに置かれたコンポーネントがインスタンス化されると、返されるインターフェイス ポインターは常に、直接インターフェイス ポインターではなくプロキシ インターフェイス ポインターになります。 ポインターは、実際にはレコーダーのインスタンスへの参照です。 このレコーダー インターフェイス参照が別のスレッドに渡される場合、元のスレッドは引き続き Windows メッセージ ループを実行して、受信スレッドがインターフェイスのマーシャリングを解除できるようにする必要があります。 そうでない場合、受信スレッドは CoUnmarshalInterface の呼び出しでハングします。
プリミティブを使用してスレッドを同期する場合は、他の同期関数ではなく MsgWaitForMultipleObjects の使用を検討してください。 このチェックは、キュー内のメッセージと同期オブジェクトの状態を示します。