当前位置: 代码迷 >> VB Dotnet >> 关于异常捕捉的奇怪有关问题
  详细解决方案

关于异常捕捉的奇怪有关问题

热度:221   发布时间:2016-04-25 02:01:25.0
关于错误捕捉的奇怪问题
vs2012 配合.net frameworks4.0编写程序
系统 win7 64bit

问题:
在VS2012的IDE中运行程序能捕捉到错误,而直接运行程序则捕捉不到错误.Debug和Release模式都是如此

详细描述:
Form1是启动窗体,代码如下
    
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            Form2.ShowDialog()
        Catch ex As Exception
            MsgBox("成功捕捉错误:" & ex.ToString)
        End Try
    End Sub



另有Form2,代码如下

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(CInt("xxx"))
    End Sub


总体来说就是有一个form1,其中有一个按钮,点击后出现form2, form2中也有一个按钮,点击会引发一个错误
在ide用运行的时候,这个错误会被form1的Try语句捕捉,从而让我使用自己的代码来处理这个错误
但如果是直接运行(鼠标双击)编译好的exe,则这个错误不会被form1的Try语句捕捉到,导致我无法用想要的方式来处理.

为何直接运行编译好的exe就捕捉不到呢?
原本我以为只要在程序最开始的地方写上try语句就可以轻松的捕获整个程序任何位置的错误;
现在看来需要在所有的位置都重复写上try语句才能做到了.
------解决思路----------------------
这是IDE自动加了对未捕获错误的处理。exe模式有专门的事件的。

点这个按钮,在新打开的 MyApplication 类中添加下面的代码
        Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException

            MsgBox("未捕捉错误:" & e.Exception.Message & vbNewLine & _
                   "类型:" & vbNewLine & e.Exception.GetType().ToString & vbNewLine & _
                   "堆栈:" & vbNewLine & e.Exception.StackTrace)
            e.ExitApplication = False
        End Sub

就有结果了
  相关解决方案