1. 程式人生 > >VB.net 捕獲項目全局異常

VB.net 捕獲項目全局異常

申請表 所有 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 捕獲項目全局異常