C#: 在终结器中,如何判断应用程序是否正在关闭?

4

我有一个终结器,在应用程序关闭期间似乎总是失败。 我认为这是因为它持有一些在该点不再有效的本机资源。 有没有办法在析构函数/终结器中告诉是否由于应用程序关闭而调用?

谢谢!

3个回答

13

4

有趣,我不知道那个 :) +1! - Philippe

1

如果它们已经被处理,您是否真的需要在终结器中处理它们?
或者反过来:您是否可以通过IDisposable模式处理它们?

即使它是您应用程序生命周期内持有的资源,您仍然可以将其放入using语句中:

static void Main()
{
  using(var yourResource = ...)
  {
     ...
     yourMainForm.YourResource = yourResource;
     Application.Run...
  }
}

编辑:除了一些有趣的答案[1],这似乎意味着整个事情有些问题。

如果终结器失败是因为资源已经被处理掉了,那么就说明出现了问题。
如果这个资源很重要,需要正确地处理掉,那么就应该正确地处理掉。
我不确定“在 UI 中引用”是否足够好。 即使在表单或其他地方完成此操作,也不难做到正确。您可以覆盖表单、组件或控制器的 dispose 方法以进行确定性处理。

[1] 如果有一天它咬了我,可能会派上用场...


如果用户在资源仍在使用中(即在UI中某处被引用)时关闭应用程序,则会发生这种情况。 - Robert Fraser
我正在使用IDisposable进行操作,现在实际上是通过Dispose方法调用...虽然Dispose和Finalize共享相同的代码。感谢您的输入! - Robert Fraser

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