我在做一个BHO(扩展IE)接收活动的其他线。当我访问DOM从其他线,即崩溃。是否有可能使DOM访问相同的线为主要BHO线所以,它并没有崩溃?

这似乎是一个一般COM多线程的问题,这我不明白了。

有帮助吗?

解决方案

看到使用 CoMarshalInterface编组

这些会给你一个包裹口STA COM对象的线的安全。

其他提示

我不知道很多关于IE浏览器的扩展,但它听起来像是需要被打上一个单线程一些COM对象,从而使COM运行时系统确保了它被调用它最初在同一线程上运行。如果你不能改变其他对象,你很可能通过标记为STA,以达到同样的效果独立的COM对象的路线到DOM您的来电。希望这有助于...我知道一点关于COM多线程,但没有太多关于IE浏览器的扩展。

啊,好玩好玩好玩的多与COM.

杰拉尔德的答案 看起来如果你想转移的接口指从一个到另一个线程的一次。我发现上面的输(全球接口的表格)是一个很大的帮助,为这种事情如果你是多线程的系统...基本上您别让周围的界面的指针,而是双cookie使用的缝得到适当编组的接口指针对任何线你们使用它。(你必须登记册问题的对象与从初第一次,并取消注册后,当你完成了或者你的对象是完)

不过要小心。性能可以成为一个严重的问题。

如果你只是玩弄了解的BHO,你可以使用STA,让您:: SetSite()实现对象进行操作,就好像它是单线程(这使您可以让其他线程拉你BHO的指针移出所述GlobalInterfaceTable作为@JasonS的提到。

如果你正在做的事情,预计将成为一个产品,我强烈建议你非常仔细地考虑去MTA到处可以和处理并发和线程安全问题你自己的一部分。在这种情况下,你只需要确保线程与BHO的COM对象操作间,为自己,为COM初始化。

例如,如果你想监控的网站寻找的东西(无论是危险或敏感)的呼入/呼出数据 - 那么你不想因为使用雅虎作为迫使所有这些线程的下一个STA对象的喉咙一个例子,多于30个请求将启动并您的BHO将开始锁定了IE。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top