VB.net 捕獲項目全局異常
阿新 • • 發佈:2018-05-26
申請表 所有 program handle exception 窗體 direct obj sub
在項目中添加如下代碼:新建窗口來顯示異常信息。
Namespace My ‘全局錯誤處理,新的解決方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加後還需要一個From用來顯示錯誤。如果到這步還不會則需要先打好基礎啦 ‘======================================================== ‘以下事件可用於MyApplication: ‘ 啟動:應用程序啟動時,在創建啟動窗體之前引發。 ‘ 關閉:所有申請表格關閉後提出。 如果應用程序異常終止,則不會引發此事件。 ‘ UnhandledException:如果應用程序遇到未處理的異常,則引發。‘ StartupNextInstance:當啟動單實例應用程序並且應用程序已經處於活動狀態時引發。 ‘ NetworkAvailabilityChanged:當網絡連接連接或斷開連接時引發。 Partial Friend Class MyApplication ‘我們捕捉到的全局例外之一是不是線程安全的,所以我們需要首先使其線程安全。 Private Delegate Sub SafeApplicationThreadException(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)Private Sub ShowDebugOutput(ByVal ex As Exception) ‘顯示輸出錯誤的From窗體 Dim frmD As New Form2() ‘顯示解決方案名 frmD.TextBox1.AppendText("Product Name:" & My.Application.Info.ProductName & vbNewLine) ‘顯示當前版本號 frmD.TextBox1.AppendText("Product Version:" & My.Application.Info.Version.ToString() & vbNewLine) frmD.TextBox1.AppendText("OS Name:" & My.Computer.Info.OSFullName & vbNewLine) frmD.TextBox1.AppendText("OS Version:" & My.Computer.Info.OSVersion & vbNewLine) ‘NET2.0下判斷x86還是64 If Environment.GetEnvironmentVariable("ProgramFiles(x86)") = "" Then frmD.TextBox1.AppendText("OS Platform:x86" & vbNewLine) Else frmD.TextBox1.AppendText("OS Platform:x64" & vbNewLine) End If frmD.TextBox1.AppendText("--------------------" & vbCrLf) ‘顯示錯誤 frmD.TextBox1.AppendText(ex.ToString()) frmD.ShowDialog() ‘執行應用程序清理 ‘TODO: 在這裏添加您的應用程序清理代碼。 ‘退出應用程序 - 或嘗試從異常中恢復: Environment.Exit(0) End Sub Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup ‘ 有三個地方可以捕獲所有全球未處理的異常: ‘ AppDomain.CurrentDomain.UnhandledException event。 ‘ System.Windows.Forms.Application.ThreadException事件。 ‘ MyApplication.UnhandledException事件。 AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf AppDomain_UnhandledException AddHandler System.Windows.Forms.Application.ThreadException, AddressOf app_ThreadException End Sub Private Sub app_ThreadException(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs) ‘這不是線程安全的,所以使其線程安全。 If MainForm.InvokeRequired Then ‘調用主線程 MainForm.Invoke(New SafeApplicationThreadException(AddressOf app_ThreadException), New Object() {sender, e}) Else ShowDebugOutput(e.Exception) End If End Sub Private Sub AppDomain_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) ShowDebugOutput(DirectCast(e.ExceptionObject, Exception)) End Sub Private Sub MyApplication_UnhandledException(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException ShowDebugOutput(e.Exception) End Sub End Class End Namespace
VB.net 捕獲項目全局異常