2015-07-06 73 views
2

在我的C#應用​​程序中,當我在Visual Studio中以調試模式運行它時,它中斷說我有一個未處理的異常(它是一個System.ArgumentException)。但是當我在發佈模式下運行它時,應用程序不會崩潰。C#應用程序中未處理的異常是否會導致應用程序崩潰?

我的問題是如果我有未處理的異常後果是什麼?當用戶進入場景時,應用程序是否會崩潰?

+8

當然它崩潰 –

+0

你是什麼意思的崩潰?它是一個控制檯應用程序?如果是,請嘗試在ide外運行。 – shahkalpesh

+0

你爲什麼不嘗試呢?我需要10分鐘才能寫出概念驗證。 – Aron

回答

1

C#應用程序中的未處理異常是否會使應用程序崩潰?

如果您的意思是'未處理',在某種意義上'未處理',那麼它不一定。可以說,你的方法從靜態無效Main(在主線程中)開始,它會拋出未處理的異常。這會導致應用程序崩潰。但另一方面,如果你在一個新的任務(方法)中異步運行相同的方法,它將會導致執行此任務的線程yes,但不是你的應用程序(這個異常將由任務管理器自動處理)。

P.S. 因此未處理的任何異常終止程序流程。

+1

['ThrowUnobservedTaskExceptions'](https://msdn.microsoft.com/en-us/library/jj160346.aspx)? – Sinatr

+2

如果一個異常沒有崩潰/終止進程,那麼它已被處理。也許不是通過你的代碼,而是通過框架中的異常處理程序。這也適用於您可以配置是否應該處理「未查看任務例外」的任務。 –

0

如果異常真的未處理(它會遍歷所有圖層),而不會導致應用程序崩潰。然而,正如其他人之前已經提到的,當異常只是拋出一些代碼行,並捕獲任何其他體面的VS可能會顯示錯誤,然後將繼續在您的捕獲處理程序中調試。

考慮以下代碼:

void Main(string[] args) 
{ 
    try { 
     DoSomething(); 
    } catch { 
     /* error-handling happens here */ 
    } 
} 

void DoSomething { 
    // this exception will bubble until Main and is handled there --> no crash 
    throw new ArgumentException(); 
} 

但是,如果你沒有你的Main - 方法中的任何try-catch嵌段(或DoSomething內)的應用也將通過泡沫,但因此它不處理會導致到應用程序崩潰。

+0

關於*可能會顯示錯誤*,我更喜歡在附加調試程序的情況下運行應用程序時檢測自己,並且在這種情況下不處理未處理的異常,這樣可以確保它們崩潰並且更易於調試。 – Sinatr