爲什麼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塊中這樣做。 –