gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:24:02 25 4
gpt4 key购买 nike

我不明白为什么在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com