VB.Net High Level Error Handling MyApplication_UnhandledException — VB.Net 中使用高層次的例外/錯誤處理 MyApplication_UnhandledException

在上星期和顧問開會的時候..
他問到…我們有沒有在程式上做Error Handling
大家當然說有…
當了一段時候的Developer後便發覺..
Error Handling —用Try and Catch Statement

處理錯誤的好處…
1) 可以避免程式因為一些處理上的問題出現問題之後自己Throw Exception之後便自動關閉…
2) 是可以更加了解自己的程式上…
那一個地方做很不夠好…
或者可以做多一些驗證..會令到整個程式更加 Robust/穩定...

之後他又問..我們有沒有建立一些High Level 的 Error Handling 的方法…
這個問題我從來都沒有想過的…
還以為Try/Catch Statement 已經後足夠…
原來High Level Error Handling 是一個 在方法..
去捕捉一些我們沒有用Try/Catch Statement 去處理的程式碼..
而這些程式碼又因為一些突如其來出現的情況令到程式出現 Application Un-handled Exception 令到這個程式 死掉/自動關閉

今天想和大家分享我今日學會的
High Level Error Handling的方法
去處理 程式上一些沒有被處理的 錯誤..令到這程式即使出現Application Error/ un-handled Exception
也不會出現Error Message 錯誤信息..之後自我關閉…

方法十分簡單

首先在程式碼上建立一些壞的Code
E.G.

Dim i As Int16 = "999999999"

這會出現 “Arithmetic operation resultd in a overflow” 的錯誤
因為Int16最大可儲存的數值是 -32768 到 +32767.

在執行的時候會出現以下的錯誤 [如我們所料]

要處理這些Unhandled Exception 我們可以打開這個Project 的”內容/Properties
在”應用程式 /Application“分頁

按一下”檢視應用程式事件 “View Application Events
在”ApplicationEvent.vb” 中 按一下Drop Down List 下拉列表 選擇 “(My Application Events)

在”Declarations” Drop down List 下拉列表  選擇 “(UnhandledException)

之後便會自己產生 像以下一樣的程式碼

之後我們便可以加入自己的Code 來 作一個比較
高層次的Error Handling去處理一些忘了處理或突如其來 的Exception

以下是我用來作示範的程式碼


Private Sub MyApplication_UnhandledException(ByVal sender As Object,
                ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException

            'e.Exception.GetType().ToString
            ' 是用來顯示錯誤的類型
            'e.Exception.Message
            '用來顯示錯誤信息
            'e.Exception.StackTrace
            '顯示詳情錯誤資訊...Stack Trace
            MessageBox.Show("錯誤信息: " & vbNewLine &
                             e.Exception.StackTrace,
            "程式錯誤 --- " & e.Exception.GetType().ToString & " -- " & e.Exception.Message,
            MessageBoxButtons.OK,
            MessageBoxIcon.Error)
            'e.ExitApplication = False 是用來停止程式自動關閉的
            ' = True 當遇到 MyApplication_UnhandledException 時會自動關閉程式
            e.ExitApplication = False
        End Sub

或者你可以更改一下把錯誤信息寫進
文字檔或資料庫上 或者是Email 自己…
而我這個例子都是把這個錯誤信息轉成一個
Message Box 顯示一些錯誤資料給我看 =)

Hope you find it useful

Leave a Reply