3

STA COMコンポーネントをホストするための新しいSTAスレッドを作成する場合、COMに関連するWindowsメッセージを送信するのはそのスレッドの責任です。私が収集できたものから、lock(Monitor.Enter)などの特定の組み込みの.NETスレッドプリミティブは、オブジェクトが別のスレッドによって解放されるのを待っている間、これを行います。私が見た.NETポンプCOMメッセージを作成する別の方法は、.Join()を使用することです。

この動作を備えた組み込みのスレッドプリミティブの完全なリストはどこにありますか?WaitHandleを待つことはこれをサポートしますか?WaitAny()、または.NET 4の新しい同時コレクションについてはどうですか?特定の方法のドキュメントでこれを見つけることができません。

4

1 に答える 1

2

これは、古いものではありますが、SSCLI20 ソースからいくらかリバース エンジニアリングできます。MsgWaitForMultipleHandles を実装するコア CLR 関数は DoAppropriateWait です。私が見たところ、AutoResetEvent、ManualResetEvent、および Semaphore で使用されていますが、Mutex では使用されていません。1 つの癖は、WaitHandle.WaitAny は STA スレッドからは問題ありませんが、WaitAll() が例外を生成することです。ええ、これは Chris Brumme のブログのいくつかのヒント以外には文書化されていません。私が見つけたものからあまり多くを推測することはできません。これをテストして確認してください。

于 2010-10-11T13:04:54.327 に答える