VB.net 捕获项目全局异常

前端之家收集整理的这篇文章主要介绍了VB.net 捕获项目全局异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  1. Namespace My
  2. 全局错误处理,新的解决方案直接添加ApplicationEvents.vb 到工程即可
  3. 添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦
  4. ========================================================
  5. 以下事件可用于MyApplication
  6. 启动:应用程序启动时,在创建启动窗体之前引发。
  7. 关闭:所有申请表格关闭后提出。 如果应用程序异常终止,则不会引发此事件。
  8. UnhandledException:如果应用程序遇到未处理的异常,则引发。
  9. StartupNextInstance:当启动单实例应用程序并且应用程序已经处于活动状态时引发。
  10. NetworkAvailabilityChanged:当网络连接连接或断开连接时引发。
  11.  
  12. Partial Friend Class MyApplication
  13. 我们捕捉到的全局例外之一是不是线程安全的,所以我们需要首先使其线程安全。
  14. Private Delegate Sub SafeApplicationThreadException(ByVal sender As Object,ByVal e As Threading.ThreadExceptionEventArgs)
  15. Private Sub ShowDebugOutput(ByVal ex As Exception)
  16. 显示输出错误From窗体
  17. Dim frmD As New Form2()
  18. 显示解决方案名
  19. frmD.TextBox1.AppendText("Product Name:" & My.Application.Info.ProductName & vbNewLine)
  20. 显示当前版本号
  21. frmD.TextBox1.AppendText("Product Version:" & My.Application.Info.Version.ToString() & vbNewLine)
  22. frmD.TextBox1.AppendText("OS Name:" & My.Computer.Info.OSFullName & vbNewLine)
  23. frmD.TextBox1.AppendText("OS Version:" & My.Computer.Info.OSVersion & vbNewLine)
  24. NET2.0下判断x86还是64
  25. If Environment.GetEnvironmentVariable("ProgramFiles(x86)") = "" Then
  26. frmD.TextBox1.AppendText("OS Platform:x86" & vbNewLine)
  27. Else
  28. frmD.TextBox1.AppendText("OS Platform:x64" & vbNewLine)
  29. End If
  30. frmD.TextBox1.AppendText("--------------------" & vbCrLf)
  31. 显示错误
  32. frmD.TextBox1.AppendText(ex.ToString())
  33. frmD.ShowDialog()
  34. 执行应用程序清理
  35. TODO: 在这里添加您的应用程序清理代码
  36. 退出应用程序 - 或尝试从异常中恢复:
  37. Environment.Exit(0)
  38. End Sub
  39.  
  40. Private Sub MyApplication_Startup(ByVal sender As Object,ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  41. 有三个地方可以捕获所有全球未处理的异常:
  42.  AppDomain.CurrentDomain.UnhandledException event
  43.  System.Windows.Forms.Application.ThreadException事件。
  44.  MyApplication.UnhandledException事件。
  45. AddHandler AppDomain.CurrentDomain.UnhandledException,AddressOf AppDomain_UnhandledException
  46. AddHandler System.Windows.Forms.Application.ThreadException,AddressOf app_ThreadException
  47. End Sub
  48.  
  49. Private Sub app_ThreadException(ByVal sender As Object,ByVal e As Threading.ThreadExceptionEventArgs)
  50. 这不是线程安全的,所以使其线程安全。
  51. If MainForm.Invokerequired Then
  52. 调用主线程
  53. MainForm.Invoke(New SafeApplicationThreadException(AddressOf app_ThreadException),New Object() {sender,e})
  54. Else
  55. ShowDebugOutput(e.Exception)
  56. End If
  57. End Sub
  58.  
  59. Private Sub AppDomain_UnhandledException(ByVal sender As Object,ByVal e As UnhandledExceptionEventArgs)
  60. ShowDebugOutput(DirectCast(e.ExceptionObject,Exception))
  61. End Sub
  62.  
  63. Private Sub MyApplication_UnhandledException(sender As Object,e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
  64. ShowDebugOutput(e.Exception)
  65. End Sub
  66. End Class
  67.  
  68.  
  69. End Namespace

猜你在找的VB相关文章