c#:在终结器中,如何发现应用程序是否正在关闭

本文关键字:发现 应用程序 是否 何发现 | 更新日期: 2023-09-27 17:50:43

我有一个在应用程序关闭时似乎总是失败的终结器。我认为这是因为它保留了一些在那时不再有效的本地资源。在析构函数/终结器中,是否有一种方法可以告诉它是否由于应用程序关闭而被调用?

谢谢!

c#:在终结器中,如何发现应用程序是否正在关闭

System.Environment.HasShutdownStarted

文档在这里:http://msdn.microsoft.com/en-us/library/system.environment.hasshutdownstarted.aspx

我想AppDomain.IsFinalizingForUnload()会提供这个信息。

如果它们已经被处理了,你真的需要在终结器中处理它们吗?
或者反过来说:难道你不可能通过IDisposable模式来处理它们吗?

即使它是一个你在应用的生命周期中占有的资源,你仍然可以把它放到using中:

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

Edit:除了一些有趣的答案[1]外,这听起来像是整件事出了问题。

如果终止器失败是因为资源已经被处理掉了,那么一定是哪里出了问题。
如果该资源对正确处理至关重要,则应该正确处理。
我不确定"在UI的某处被引用"是否足够好。这并不难做对,即使这是在表格中完成的。您可以覆盖表单或组件或控制器的配置以确定地执行此操作。

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