为什么COM对象在CLR Callable Wrappers中不使用IDisposable?为什么COM对象不使用IDisposable?
7
A
回答
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,虽然文档有点稀疏。
相关问题
- 1. 为什么Dispose()方法在我的IDisposable对象上不可用?
- 2. 为什么WPF不使用IDisposable,分支是什么?
- 3. 为COM对象编写正确的IDisposable实现
- 4. 为什么我不能调用发布COM对象的接口
- 5. IDisposable和COM
- 6. 使用COM对象
- 7. 使用COM对象
- 8. 为什么System.Net.Mail.MailMessage实现IDisposable
- 9. Enumerable.Range为什么实现IDisposable?
- 10. 为什么线程不执行IDisposable?
- 11. 为什么我不能在.NET创建COM对象,但在JavaScript
- 12. 为什么我不能在c#中投射com对象?
- 13. 为什么IDisposable是一个接口,而不是抽象类?
- 14. 如何使用IDisposable处置对象
- 15. com对象究竟是什么,我该如何使用它?
- 16. 监视器/确定什么时候使用com对象
- 17. 为什么我在IDisposable类中使用私有成员IDisposable获取CA2000?
- 18. 将类型转换为IDisposable - 为什么?
- 19. C#IDisposable对象为整个类
- 20. 为什么PHP COM对象没有返回正确的结果?
- 21. 为什么log4net使用对象?
- 22. 什么导致InvalidComObjectException:“不能使用与其基础RCW分离的COM对象。”?
- 23. 为什么对象引用不能引用预期的对象?
- 24. EntLib CacheManager和IDisposable对象
- 25. IDisposable对象的Unity RegisterInstance
- 26. 为什么Stream类实现IDisposable?
- 27. C#Ctor不能新Com Com对象?
- 28. 不适当地使用jQuery promise对象。不知道为什么
- 29. 为什么不使用class-keyword不能创建对象?
- 30. 为什么对象的方法不可用于其他对象?
不知道你到底是什么意思...... COM对象非常复杂,IDisposable的实现将取决于几个方面,包括你打算如何使用COM对象......那么框架将如何实现/自动执行此操作? – Yahia
这将完成exaclty?请参阅Joe的答案以及该答案中的链接... – Yahia
理想情况下,它会调用Marshal.FinalReleaseComObject,因此您不必在finally块中这样做。 –