AppDomain.CurrentDomain.UnhandledException的处理程序不会被调用

时间:2016-07-15 10:23:37

标签: vb.net multithreading visual-studio-2008 .net-3.5 .net-4.6

我试图以这种方式设置我的.net应用程序,总是会在某处记录未处理的异常。我的理解是需要为此设置两个处理程序,Windows.Forms.Application.ThreadException用于UI线程(后跟Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)),AppDomain.CurrentDomain.UnhandledException用于非UI线程。我在我的应用程序Sub Main()中执行此操作,并且Application.ThreadException - 处理程序实际上正在运行,但我无法弄清楚,如何获取AppDomain.CurrentDomain.UnhandledException - 处理程序工作(或为什么它不起作用)。

我的测试代码是这样的:

Private Sub ThreadTask(ByVal StateObj As Object)
        Throw New Exception("Unhandled Exception")
End Sub

Public Sub CauseException()
    Dim StObj As New ThreadParamsObj
    ThreadPool.QueueUserWorkItem(AddressOf ThreadTask, StObj)
End Sub

如果我在简约测试应用程序(带有单个按钮的表单,AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler中调用Form1_Load)中尝试它 - 它按预期工作,显示MsgBox但是在"真实"申请它没有用。

什么可以阻止事件被触发或处理程序处理它?<​​/ p>

答案是: .net 3.5 中的System.Data.OracleClient.OracleConnection.OpenOracle.DataAccess.Client.Open(以及其他DbConnections),升级到 .net 4.6.1 解决了这个问题。

0 个答案:

没有答案