我有一個終結器,在應用程序關閉期間似乎總是失敗。我認爲這是因爲它保留了一些在當時不再有效的本地資源。有沒有辦法在析構函數/終結器中告訴它是否因應用程序關閉而被調用?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