2

谁能给我一个明确的答案,我是否需要使用 CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream 或 GlobalInterfaceTable 之类的东西来编组线程之间的 COM 接口?在这个线程中,有人说互操作为你做,有人说你需要使用这些调用。它是哪一个?

具体来说,我在 IE 中开发浏览器帮助器对象时使用了来自 mshtml 的各种 IHTMLxxx 对象。我从未使用过像 CoMarshalInterThreadInterfaceInStream 这样的方法,也从未意识到这会导致任何问题。但也许这可能是一些间歇性不可重复问题的原因......

谢谢。

4

1 回答 1

2

根据经验,如果您的 dll 在 IE 中作为 BHO 加载,那么您不需要进行任何跨线程编组。似乎 .NET 自己完成了所有的魔法。

您应该做的是确保您只使用 STA 线程来访问 MSHTML 对象。任何从 IE 事件进入 BHO 的线程都将自动成为 STA 线程,但如果您有其他线程(例如后台计时器),那么您应该在访问 IE 对象之前确保它们是 STA,否则会发生坏事。

于 2011-05-20T10:35:04.427 回答