zoukankan      html  css  js  c++  java
  • VB.net 捕获项目全局异常

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

    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
  • 相关阅读:
    Win7怎么进入安全模式 三种轻松进入Win7安全模式方法
    Eclipse中新建applet 错误
    经典语录
    轻松一刻
    WIN XP蓝屏代码大全
    大话设计模式简单总结
    生命是闹着玩儿,事事显出如此 (转)
    Educational Codeforces Round 42 (Rated for Div. 2) A
    2018年东北农业大学春季校赛----不完整题解
    POJ
  • 原文地址:https://www.cnblogs.com/profession/p/9091194.html
Copyright © 2011-2022 走看看