2010-01-22 33 views
3

我有一個C#.NET程序集,可以從C++ COM客戶端調用。當客戶端進程明確釋放COM對象時,CCW將釋放它的內部引用,從而使.NET對象有資格進行垃圾回收。COM可調用包裝和.NET對象的生存期

如果.NET對象具有打開日誌文件的靜態構造函數會怎麼樣?是否有一個優雅的解決方案來關閉日誌文件,而不需要客戶端的明確請求?

TIA。

回答

1

使用AppDomain.ProcessExit EventHandler進行了一些測試後,似乎是關閉日誌文件的不錯選擇。

0

如果你不想修改COM客戶端,那麼你對任何確定的近距離魔法都是不好的。最終,文件處理在未來的一段時間內被關閉(假設它是一個FileStream)當手柄的終結由GC叫你CCW失去了GC根後(一個或多個)

-Oisin

+0

客戶端進程結束時會調用終結器嗎? – 2010-01-22 15:52:52

+0

如果這是一個進程內COM服務器:是的。 – 2010-01-22 16:05:40

+0

使用AppDomain.ProcessExit EventHandler進行了一些測試後,似乎是關閉日誌文件的不錯選擇。 – 2010-01-26 07:23:07