.net interop是否为COM执行跨线程封送,或者我是否需要使用CoMarshalInterThreadInterfaceInStream或类似工具?

.net interop是否为COM执行跨线程封送,或者我是否需要使用CoMarshalInterThreadInterfaceInStream或类似工具?,.net,interop,marshalling,.net,Interop,Marshalling,是否需要使用CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream或GlobalInterfaceTable之类的工具来管理线程之间的COM接口,有人能给我一个明确的答案吗?有人说interop为您做了这件事,有人说您需要使用这些调用。是哪一个 具体来说,我在IE中开发浏览器助手对象时,使用mshtml中的各种IHTMLxxx对象。我从未使用过像CoMarshalInterThreadInterfaceInStre

是否需要使用CoMarshalInterThreadInterfaceInStream、CoGetInterfaceAndReleaseStream或GlobalInterfaceTable之类的工具来管理线程之间的COM接口,有人能给我一个明确的答案吗?有人说interop为您做了这件事,有人说您需要使用这些调用。是哪一个

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


谢谢。

根据经验,如果您的dll在IE中作为BHO加载,则不需要执行任何跨线程编组。看来.NET本身就拥有了所有的魔力

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