BHO - 从工作线程附加事件处理程序

时间:2009-03-26 09:46:47

标签: internet-explorer com bho

在DISPID_DOCUMENTCOMPLETE上,如果我从工作线程为DOM中的特定元素附加onclick处理程序,那么在单击它时不会触发该事件,原因可能是什么?如果我从主线程附加事件处理程序,这工作正常,但我想异步做事。

我正在使用CoMarshalInterThreadInterfaceInStream和CoGetInterfaceAndReleaseStream在线程之间传递IID_IWebBrowser2指针。

1 个答案:

答案 0 :(得分:1)

您的工作线程在做什么,以及事件处理程序的线程模型是什么?如果线程模型是STA,那么工作线程需要定期泵送消息,或者如果它正在等待同步,那么它应该使用CoWaitFor...函数,以确保将处理COM消息。或者,您可以聚合自由线程编组器,但要确保您的对象是线程安全的,并且如果执行此操作,则不会调用任何其他可能导致线程模型错误的COM接口。

可能Web浏览器控件与MTA不兼容,因此您无法将其置于其中。在任何情况下,MTA都与用户界面线程不兼容,因此规则可以解决。