我有一个从C ++ COM客户端调用的c#.NET程序集。当客户端进程明确释放COM对象时,CCW发布它是内部引用,从而使.NET对象有资格进行垃圾回收。
如果.NET对象有一个打开日志文件的静态构造函数怎么办?是否有一个优雅的解决方案来关闭日志文件而没有来自客户端的明确请求?
TIA。
答案 0 :(得分:1)
使用AppDomain.ProcessExit进行一些测试后,EventHandler似乎是关闭日志文件的不错选择。
答案 1 :(得分:0)
如果你不想修改COM客户端,那么你就不会有任何确定的近距离魔法。最终,文件句柄将在未来的某个时间关闭(假设它是一个FileStream),当你的CCW丢失其GC根目录后,GC调用句柄的Finalizer(s。)
-Oisin