码迷,mamicode.com
首页 > Web开发 > 详细

VB.net 捕获项目全局异常

时间:2018-05-26 01:16:19      阅读:501      评论:0      收藏:0      [点我收藏+]

标签:and   nta   handle   orm   for   textbox   val   显示   ndt   

在项目中添加如下代码:新建窗口来显示异常信息。

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 捕获项目全局异常

标签:and   nta   handle   orm   for   textbox   val   显示   ndt   

原文地址:https://www.cnblogs.com/profession/p/9091194.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!