我有一个终结器,在应用程序关闭期间似乎总是失败。 我认为这是因为它持有一些在该点不再有效的本机资源。 有没有办法在析构函数/终结器中告诉是否由于应用程序关闭而调用?
谢谢!
我有一个终结器,在应用程序关闭期间似乎总是失败。 我认为这是因为它持有一些在该点不再有效的本机资源。 有没有办法在析构函数/终结器中告诉是否由于应用程序关闭而调用?
谢谢!
System.Environment.HasShutdownStarted
文档在这里:http://msdn.microsoft.com/en-us/library/system.environment.hasshutdownstarted.aspx
如果它们已经被处理,您是否真的需要在终结器中处理它们?
或者反过来:您是否可以通过IDisposable模式处理它们?
即使它是您应用程序生命周期内持有的资源,您仍然可以将其放入using语句中:
static void Main()
{
using(var yourResource = ...)
{
...
yourMainForm.YourResource = yourResource;
Application.Run...
}
}
编辑:除了一些有趣的答案[1],这似乎意味着整个事情有些问题。
如果终结器失败是因为资源已经被处理掉了,那么就说明出现了问题。
如果这个资源很重要,需要正确地处理掉,那么就应该正确地处理掉。
我不确定“在 UI 中引用”是否足够好。
即使在表单或其他地方完成此操作,也不难做到正确。您可以覆盖表单、组件或控制器的 dispose 方法以进行确定性处理。
[1] 如果有一天它咬了我,可能会派上用场...