为什么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. 为什么我不能调用发布COM对象的接口
- 3. IDisposable和COM
- 4. 使用COM对象
- 5. 使用COM对象
- 6. 为什么我不能在.NET创建COM对象,但在JavaScript
- 7. 为什么线程不执行IDisposable?
- 8. 为什么System.Net.Mail.MailMessage实现IDisposable
- 9. 如何使用IDisposable处置对象
- 10. 监视器/确定什么时候使用com对象
- 11. com对象究竟是什么,我该如何使用它?
- 12. 为什么我在IDisposable类中使用私有成员IDisposable获取CA2000?
- 13. 将类型转换为IDisposable - 为什么?
- 14. C#IDisposable对象为整个类
- 15. 为什么PHP COM对象没有返回正确的结果?
- 16. 什么导致InvalidComObjectException:“不能使用与其基础RCW分离的COM对象。”?
- 17. EntLib CacheManager和IDisposable对象
- 18. IDisposable对象的Unity RegisterInstance
- 19. C#Ctor不能新Com Com对象?
- 20. 为什么Stream类实现IDisposable?
- 21. 为什么不使用class-keyword不能创建对象?
- 22. 不适当地使用jQuery promise对象。不知道为什么
- 23. 为什么用.each()迭代jQuery对象不给我jQuery对象?
- 24. 为什么对象的方法不可用于其他对象?
- 25. 为什么sys.objects不能作为对象使用,以及SQL Server搜索对象的默认模式是什么?
- 26. 为什么COM不使用静态空的BSTR?
- 27. COM对象 - 阵列作为对象,而不是类型
- 28. 使用Powershell列出可用COM对象
- 29. 为什么我不能在对象成员中使用一次性对象?
- 30. 我可以对IDisposable对象使用“模糊”参数传递吗?
不知道你到底是什么意思...... COM对象非常复杂,IDisposable的实现将取决于几个方面,包括你打算如何使用COM对象......那么框架将如何实现/自动执行此操作? – Yahia
这将完成exaclty?请参阅Joe的答案以及该答案中的链接... – Yahia
理想情况下,它会调用Marshal.FinalReleaseComObject,因此您不必在finally块中这样做。 –