2013-04-14 72 views
2
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 
Forms.Application.ThreadException += 
    new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 

是代碼我刪除了類似的問題,但它未能解決我的情況。 我想要做的是趕上崩潰和正確處置我的應用程序,所以我不留下內存轉儲/痕跡/系統托盤圖標捕捉異常,並在程序崩潰時正確處理程序

+1

什麼異常不被'AppDomain異常處理程序'捕獲?你能顯示一些代碼嗎? –

+0

當我在Visual Studio調試器中關閉它時,它會留下系統托盤圖標和其他未定義的項目,我很確定以後無法恢復...我如何強制它正常關閉,我恐怕它也會從另一個原因發生,並且可能會導致一些最終用戶問題,因爲它不再在調試器中。 – pl0xtic

+1

「當我在Visual Studio調試器中關閉它時」是否是個例外?如果你只是停止調試一個進程,當然清理不會被執行,因爲你有效地中止了進程。 –

回答

0

如果您終止進程使用調試器或任務管理器,有沒有辦法來處理這種情況 - 無論是.NET應用程序還是本地應用程序。

在CLR中處理OS異常可能是可能的,但不建議。有關更多詳細信息,請參見Is it possible to catch an access violation exception in .NET?

在幾乎所有情況下,您的進程都不應該以這些方式終止,即使這樣做,也不需要進行正確的處理,因爲操作系統可以正確關閉幾乎所有的句柄:文件,連接等。終止的應用程序將托盤圖標留在後面是Explorer中的一個20年的bug,你無法做任何事情。我們只希望微軟有一天能夠解決它。

相關問題