COM Callable Wrapper和.NET对象生命周期

3
我有一个c# .NET程序集,被C++ COM客户端调用。当客户端进程显式释放COM对象时,CCW会释放其内部引用,从而使.NET对象有资格进行垃圾回收。
如果.NET对象具有打开日志文件的静态构造函数,有没有一种优雅的解决方案可以在没有来自客户端的显式请求的情况下关闭日志文件?
谢谢。
2个回答

1

经过一些测试,使用AppDomain.ProcessExit事件处理程序似乎是关闭日志文件的不错选择。


0
如果您不想修改COM客户端,那么对于任何确定性关闭的魔法,您就没有什么办法了。最终,文件句柄(假设它是一个FileStream)将在未来的某个时间被关闭,当您的CCW失去其GC根引用后,GC会调用句柄的Finalizer。
-Oisin

当客户端进程结束时,Finalizer 会被调用吗? - anon
如果这是一个进程内的COM服务器:是。 - Hans Passant
经过一些测试,使用AppDomain.ProcessExit事件处理程序似乎是关闭日志文件的不错选择。 - anon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接