UI 线程异常处理程序在调试会话期间被忽略
UI thread exception handler is ignored during debug session
在桌面应用程序中我设置了琐碎的
如果有人想要代码(那里没有什么有趣的):
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
的 ButtonOK_Click(...)
事件处理程序中抛出异常时会有所不同:
- 作为独立启动时 (
app.exe
),然后 UIThreadException()
会按预期被调用
- 当从 Visual Studio (
app.vshost.exe
) 内部启动时,然后 CurrentDomain_UnhandledException()
在相同的场景 中调用 (代码中的相同位置和以前一样,相同的数据),忽略 UIThreadException()
handler
所以在独立的 exe 中,一切都可靠地工作,但是在调试会话期间,在相同的情况下陷入未处理的异常是非常烦人的。
我可以在 Visual Studio 2012 年和 2015 年观察到相同的行为。如果在简单的示例上进行测试,它在调试会话中也始终按预期工作。如果代码更复杂(在嵌套调用中抛出异常等),那么 UI 线程异常处理程序将被忽略。
你们中有人能够观察到同样的问题并找到解决方案吗?
在OnLoad()事件中抛出了异常(我没有注意到)。
一些没有经验的同事将 SQL 处理放入 OnLoad 事件处理程序而不是构造函数或 OnShow 事件处理程序。 是的,我去过那里
在桌面应用程序中我设置了琐碎的
如果有人想要代码(那里没有什么有趣的):
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
的 ButtonOK_Click(...)
事件处理程序中抛出异常时会有所不同:
- 作为独立启动时 (
app.exe
),然后UIThreadException()
会按预期被调用 - 当从 Visual Studio (
app.vshost.exe
) 内部启动时,然后CurrentDomain_UnhandledException()
在相同的场景 中调用 (代码中的相同位置和以前一样,相同的数据),忽略UIThreadException()
handler
所以在独立的 exe 中,一切都可靠地工作,但是在调试会话期间,在相同的情况下陷入未处理的异常是非常烦人的。
我可以在 Visual Studio 2012 年和 2015 年观察到相同的行为。如果在简单的示例上进行测试,它在调试会话中也始终按预期工作。如果代码更复杂(在嵌套调用中抛出异常等),那么 UI 线程异常处理程序将被忽略。
你们中有人能够观察到同样的问题并找到解决方案吗?
在OnLoad()事件中抛出了异常(我没有注意到)。
一些没有经验的同事将 SQL 处理放入 OnLoad 事件处理程序而不是构造函数或 OnShow 事件处理程序。