为什么COM对象不使用IDisposable?
为什么COM对象在CLR Callable Wrappers中不使用IDisposable?
据推测,这样的IDisposable
实现将调用Marshal.ReleaseComObject。
在某些情况下,调用Marshal.ReleaseComObject是一个好主意,例如,让.NET应用程序在.NET客户端自动执行后退出。
但是,正如Marshal.ReleaseComObject
的文档所述,它不应该在一般情况下使用 - 并且可能根本不用于进程内COM对象。 这里有一个博客文章,提供一些更详细的信息。
因此,鼓励人们通过从RCW中的IDisposable
实现中调用它来使用它并不是一个好主意。
但有趣的是,Silverlight 4 AutomationFactory.CreateObject
方法确实返回了一个IDisposable
动态对象。 测试似乎表明,这实际上释放COM参考,尽管文档有点稀疏。