0

DISPID_DOCUMENTCOMPLETE で、ワーカー スレッドから DOM の特定の要素に onclick ハンドラをアタッチすると、クリック中にイベントが発生しません。その理由は何ですか? メインスレッドからイベントハンドラーをアタッチしている場合、これは正常に機能しますが、非同期で処理したいと考えています。

CoMarshalInterThreadInterfaceInStream と CoGetInterfaceAndReleaseStream を使用して、スレッド間で IID_IWebBrowser2 ポインターを渡します。

4

1 に答える 1

1

ワーカースレッドは何をしていて、イベントハンドラーのスレッドモデルは何ですか?スレッドモデルがSTAの場合、ワーカースレッドは定期的にメッセージを送信するか、同期を待機している場合はCoWaitFor...関数を使用して、COMメッセージが確実に処理されるようにする必要があります。または、フリースレッドマーシャラーを集約できますが、オブジェクトがスレッドセーフであり、これを行うとスレッドモデルエラーが発生する可能性のある他のCOMインターフェイスを呼び出さないようにしてください。

おそらく、WebブラウザコントロールはMTAと互換性がないため、MTAに配置することはできません。いずれにせよ、MTAはユーザーインターフェイススレッドと互換性がないため、それは除外されます。

于 2009-03-26T10:17:30.270 に答える