我对这个类的理解是,当你想确定类的终结器(析构函数)被调用时,你应该使用它,但从我做的几个测试来看,这似乎不是真的。如果它不能确保调用 dispose 方法,还有其他方法吗?例如,如果我想确保运行某些代码来结束我的对象,即使我通过任务管理器或其他方式关闭了我的程序?
问问题
3433 次
4 回答
8
于 2009-07-21T03:12:10.533 回答
3
从我做的几个测试来看,这似乎不是真的。
.Net 中的终结器是不确定的。 这意味着无法保证何时调用终结器。仅仅因为一个对象超出范围甚至被释放,并不意味着终结器将被立即调用。垃圾收集器将在未来某个未知时间处理它。
于 2009-07-21T03:12:02.997 回答
3
如果你真的需要在你的程序是 Ctrl+Alt+Del'd 时运行代码,我认为除了有一个单独的程序来监视第一个状态之外别无他法。如果你真的需要那么多架构,我想你会想要使用一个服务和一些客户端应用程序,或者一对或服务。
不过,这是假设您已经查看了应用程序事件。如果您还没有,请查看此概述。
编辑可能比那个概述更好的是ApplicationExit 事件。
于 2009-07-21T03:43:53.620 回答
1
Finalize()
方法和方法是不同的Dispose()
东西。
默认情况下,Dispose
永远不会被调用。您必须自己从Finalize
方法中调用它。考虑以下内容(为简洁起见,请忽略此处正确完成/处置模式中的明显失败):
public class Foo : IDisposable
{
public void Dispose()
{
// NOP
}
~Foo()
{
Dispose();
}
}
于 2015-01-20T19:57:13.677 回答