[C#.NET][VB.NET] Winform 應用程式等級的例外捕捉 / Winform of Application Level wicth Exception Catch

  • 13428
  • 0
  • C#
  • 2010-11-03

[C#.NET][VB.NET] Winform 應用程式等級的例外捕捉 / Winform of Application Level wicth Exception Catch

首先,文章放到首頁並不是為了增加人氣,而是為了接受更多前輩的指教,得到不同的看法;更盼能引起更多人的討論,相互切磋學習。

 

我們都知道寫程式都要使用try catch 結構來補捉例外,萬一你有一個功能忘了寫 try catch 那該怎麼辦?以下的方案可能可以解決掉你所面臨的困難。

1.System.Windows.Forms 命名空間裡的Application.SetUnhandledExceptionMode 方法可以用來設定應用程式的例外捕捉,它是用來指示應用程式如何回應未處理的例外狀況,如果可以還是用try Catch結構來捕捉例外。

image

2.而UnhandledExceptionMode 列舉型別是用來決定應用程式應將未處理之例外狀況 (Exception) 傳送至何處。

image

 

3.Application.ThreadException事件是用來補捉UI執行緒所漏接的例外。

4.若要攔截不是UI 所建立及擁有的執行緒中發生的例外狀況,請使用 AppDomain.UnhandledException 事件

瞭解大概要用哪些類別後,便可以來實作。

首先開啟一個Winform專案在Progarm.cs檔案底下的Main方法加入以下程式碼

image

 

 

再加入方法

image

然後在UI程式中,隨便寫個東西觸發例外

image

觀察執行結果

當第一次執行 result = Convert.ToInt32(source) 時會跳出以下例外視窗

image

第二次執行 result = Convert.ToInt32(source) 時會跳出以下視窗

image

 

很顯然我們補捉到了漏網之魚的例外。

VB需要一些步驟(感謝Bill叔提供),主要是將Code寫在Sub Main裡。

範例下載

VB_AppException.zip

CS_AppException.zip

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo