为什么COM对象在其CLR Callable Wrappers中不使用IDisposable?
答案 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,尽管文档有点稀疏。