.net - ThreadException 只能有 1 个且只有 1 个处理程序吗?

标签 .net vb.net

我不明白为什么在 VS2010 中使用 (CTRL-F5 - Run without Debugger) 在以下情况下只得到 1 个消息框:

Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ' Add the event handler for handling UI thread exceptions to the event.
        AddHandler Application.ThreadException, AddressOf ThreadExceptionHandler
        AddHandler Application.ThreadException, AddressOf ThreadExceptionHandler2

        Throw New Exception("Ha!")

    End Sub

    Private Sub ThreadExceptionHandler(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs)
        MsgBox("FirstHandler")
    End Sub

    Private Sub ThreadExceptionHandler2(ByVal sender As Object, ByVal e As ThreadExceptionEventArgs)
        MsgBox("SecondHandler")
    End Sub
End Class

最佳答案

呵呵。显然如此。

根据 dotPeek , 这是 add 的代码和 remove Application.ThreadException 的处理程序:

public static event ThreadExceptionEventHandler ThreadException
{
  add
  {
    System.Windows.Forms.IntSecurity.AffectThreadBehavior.Demand();
    Application.ThreadContext threadContext =
      Application.ThreadContext.FromCurrent();
    lock (threadContext)
      threadContext.threadExceptionHandler = value;
  }
  remove
  {
    Application.ThreadContext threadContext =
      Application.ThreadContext.FromCurrent();
    lock (threadContext)
      threadContext.threadExceptionHandler -= value;
  }
}

注意如何,在 remove 中处理程序,它使用 -=正如预期的那样,但在 add处理程序,它只使用 = ?你会认为应该是 += ,但看起来并非如此。

所以是的,当您使用 += 时操作符来添加一个新的事件处理程序(转换为对 add 处理程序的调用),WinForms 实际上是替换现有的处理程序而不是添加到它。

看起来像一个错误,简单明了。如果你把它写在 Connect ,在此处发布链接,以便其他人可以为其投票。

关于.net - ThreadException 只能有 1 个且只有 1 个处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7881204/

相关文章:

c# - Microsoft fakes 的 shim 在内部是如何工作的?

.net - 当接口(interface) ReadOnly 属性在 C#.NET 中有效时,为什么不能在 VB.NET 中覆盖它?

vb.net - 反射 - 类内数组的 SetValue?

vb.net - 在 VB.NET 中直接调用模块函数是一种好习惯吗?

c# - 当一个变量被关闭两次时,它存储在哪里?

.net - 如何在不将应用程序池标识设置为本地系统的情况下从网站重新启动应用程序池?

.net - 是否可以在.NET 中编写一个只接受数字类型的通用函数?

asp.net - 如何覆盖错误页面的页面渲染?

python - 在 python 中调用 vb dll

mysql - 使用 INNER JOIN 时 MySql 语法错误