调试会话期间将忽略UI线程异常处理程序

时间:2016-06-07 09:53:26

标签: vb.net visual-studio-2012 exception-handling visual-studio-2015 .net-3.5

在桌面应用程序中,我设置了一些简单的

如果有人想要codez(那里没什么有趣的):

Namespace My

    Partial Friend Class MyApplication

        ' Thread exception handler. Handles all unhandled exceptions on UI thread.
        Private Sub UIThreadException(sender As Object, e As ThreadExceptionEventArgs)
            CustomErrorHandler.Handle(e.Exception, "[UIThreadException]")
        End Sub

        ' Handle the UI exceptions by showing a dialog box, and asking the user whether
        ' or not they wish to abort execution.
        ' NOTE: This exception cannot be kept from terminating the application - it can only 
        ' log the event, and inform the user about it. 
        Private Sub CurrentDomain_UnhandledException(sender As Object,
                                                     e As UnhandledExceptionEventArgs)
            Try
                Dim ex As Exception = CType(e.ExceptionObject, Exception)
                CustomErrorHandler.OnUnhandled(ex)
            Catch exc As Exception
                MsgBox(exc.ToString(), vbCritical, "Last resort error printout")
            End Try
        End Sub

    End Class

End Namespace

有时,当我从Form1的{​​{1}}事件处理程序中抛出异常时会有所不同:

  • 以独立方式(ButtonOK_Click(...))启动时,app.exe按预期调用
  • 从Visual Studio(UIThreadException())内部启动时,app.vshost.exe在同一场景中称为 (代码中的位置与以前相同,相同的数据),忽略CurrentDomain_UnhandledException()处理程序

因此,在独立的exe中,所有工作都可靠,但在调试会话期间,在相同的情况下陷入未处理的异常非常烦人。

我可以在Visual Studio 2012和2015中观察到相同的行为。如果在简单的示例上进行测试,它在调试会话中也始终按预期工作。如果代码更复杂(嵌套调用中抛出异常等),则会忽略UI线程异常处理程序。

您是否有人能够观察到同样的问题并找到解决方案?

1 个答案:

答案 0 :(得分:0)

在OnLoad()事件中引发了异常(我没有注意到它)。

一些没有经验的同事将SQL处理放入OnLoad事件处理程序而不是构造函数或OnShow事件处理程序。 And this is where troubles begin.是的,我曾经去过那里。