为什么COM对象不使用IDisposable?

时间:2011-09-19 07:24:34

标签: .net com

为什么COM对象在其CLR Callable Wrappers中不使用IDisposable?

1 个答案:

答案 0 :(得分:4)

大概这样的IDisposable实现会调用Marshal.ReleaseComObject

有些情况下调用Marshal.ReleaseComObject是个好主意,例如to get an Office application to quit after automation from a .NET client

但是作为Marshal.ReleaseComObject的文档说明,它不应该在一般情况下使用 - 并且可能根本不用于进程内COM对象。 Here's a blog post with some more detailed info

因此,鼓励人们通过从RCW中的IDisposable实施中调用它来使用它不是一个好主意。

然而,有趣的是Silverlight 4 AutomationFactory.CreateObject方法 返回IDisposable的动态对象。而且测试似乎显示this does in fact release the COM reference,尽管文档有点稀疏。