2

スレッド間の COM インターフェイスをマーシャリングするために、CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream、または GlobalInterfaceTable などを使用する必要があるかどうかについて、決定的な答えを誰かに教えてもらえますか? このスレッドでは、interop が代わりにそれを行うと言う人もいれば、これらの呼び出しを使用する必要があると言う人もいます。それはどれですか?

具体的には、IE 内でブラウザー ヘルパー オブジェクトを開発しているときに、mshtml のさまざまな IHTMLxxx オブジェクトを使用しています。私は CoMarshalInterThreadInterfaceInStream のようなメソッドを使用したことがなく、これが引き起こした問題に気づいたこともありません。しかし、おそらくそれは、断続的な再現不可能な問題の原因である可能性があります...

ありがとう。

4

1 に答える 1

2

経験上、DLL が IE で BHO としてロードされている場合、クロススレッド マーシャリングを行う必要はありません。.NET はすべての魔法を自分で行っているようです。

ただし、MSHTML オブジェクトへのアクセスには STA スレッドのみを使用するようにしてください。IE イベントから BHO に着信するスレッドはすべて自動的に STA スレッドになりますが、他のスレッド (バックグラウンド タイマーなど) がある場合は、IE オブジェクトにアクセスする前にそれらが STA であることを確認する必要があります。

于 2011-05-20T10:35:04.427 に答える