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