我有一个终结器,在应用程序关闭期间似乎总是失败。我认为这是因为它持有一些在那时不再有效的本地资源。有没有办法在析构函数/终结器中告诉是否由于应用程序关闭而调用它?
谢谢!
答案 0 :(得分:13)
System.Environment.HasShutdownStarted
此处的文档:http://msdn.microsoft.com/en-us/library/system.environment.hasshutdownstarted.aspx
答案 1 :(得分:4)
我认为AppDomain.IsFinalizingForUnload()
会提供此信息。
答案 2 :(得分:1)
如果已经将它们丢弃,你真的需要将它们丢弃在终结器中吗? 或者反过来说:你不可能通过IDisposable模式处理它们吗?
即使它是您在应用的生命周期中抓住的资源,您仍然可以将其用于使用:
static void Main()
{
using(var yourResource = ...)
{
...
yourMainForm.YourResource = yourResource;
Application.Run...
}
}
编辑:除了一些有趣的答案[1]之外,这有点像整个事情都有些不对劲。
如果终结器由于资源已被处理而失败,则某处出现问题 如果这种资源对于妥善处理至关重要,那么这应该做得恰到好处 我不确定“引用UI中的某个地方”是否足够好。 即使这是在Form中完成的,也难以做到正确。您可以覆盖表单或组件或控制器的配置,以确定性地执行此操作。
[1]如果有一天它咬我,可能会派上用场......