我有一个终结器,在应用程序关闭期间似乎总是失败。我认为这是因为它保留了一些在当时不再有效的本地资源。有没有办法在析构函数/终结器中告诉它是否因应用程序关闭而被调用?C#:在终结器中,如何找出应用程序是否正在关闭?
谢谢!
我有一个终结器,在应用程序关闭期间似乎总是失败。我认为这是因为它保留了一些在当时不再有效的本地资源。有没有办法在析构函数/终结器中告诉它是否因应用程序关闭而被调用?C#:在终结器中,如何找出应用程序是否正在关闭?
谢谢!
System.Environment.HasShutdownStarted
文档浏览:http://msdn.microsoft.com/en-us/library/system.environment.hasshutdownstarted.aspx
如果他们已经被处置掉了,你是否真的需要在终结器中处理它们?
或者相反:你是不是可以通过IDisposable模式来处理它们?
即使是你抢坚持为您的应用程序的生命周期的资源,你仍然可以把它变成一个使用:
static void Main()
{
using(var yourResource = ...)
{
...
yourMainForm.YourResource = yourResource;
Application.Run...
}
}
编辑:从一些有趣的答案除了[1] ,这听起来像是整件事情都有问题。
如果终结器由于资源已经被处置而失败,那么在某个地方有问题。
如果此资源对于正确处置至关重要,那么应该正确地执行此操作。
我不确定“在用户界面中的某处引用”是否足够好。 即使这是通过Form或其他方式完成,并不难。您可以重写表单或组件或控制器的处置以确定性地执行它。
[1]如果有一天我咬我,可能会派上用场...
如果用户在资源仍在使用时关闭应用程序(即在UI中的某处引用),则会发生这种情况/ – 2011-04-20 08:00:08
我在IDisposable中执行此操作,现在实际上正在通过Dispose方法调用它... Dispose和尽管如此,Finalize共享相同的代码。感谢您的意见,但! – 2011-08-16 19:01:44
+1。你击败了我。 – Steven 2011-04-20 07:53:23