Dan*_*don 11 .net vb.net events event-handling
我写了一些代码来处理事件,如下所示:
AddHandler myObject.myEvent, AddressOf myFunction
Run Code Online (Sandbox Code Playgroud)
似乎一切都在工作,但是当我运行调试器时,我发现通常myFunction每次都会运行几次myObject.myEvent.我发现我已经允许代码添加事件处理程序多次运行,从而导致此行为.
有没有办法可以做这样的事情?
If myObject.myEvent is not handled Then
AddHandler myObject.myEvent, AddressOf myFunction
End If
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 14
假设您的代码不是发布事件的代码,则不能.这个想法是订阅者彼此隔离 - 你无法找到其他活动订阅者,自己提出活动等.
如果问题是,你将自己的处理程序多次,你应该能够修复自己被跟踪是否您已经添加了一个处理程序.Steven在添加处理程序之前删除处理程序的想法是一个有趣的解决方法:尝试删除处理程序即使它没有订阅也是有效的.但是,我认为这是一个解决方案,你的应用程序不知道它应该做什么.这是一个非常快速的短期修复,但我担心长期留下它.
或者:
不要多次添加处理程序.
尝试在添加之前删除处理程序.
我知道这是一篇旧文章,但只是想为那些朝这个方向寻找的人添加一个解决方案......
VB.Net 按照以下模式创建一个特殊的私有成员变量,<YourEvent>Event然后您可以使用它来测试 Nothing。
Public Event MyClick As EventHandler
Private Sub OnMyClick()
If MyClickEvent IsNot Nothing Then
RaiseEvent MyClick(Me, New EventArgs())
Else
' No event handler has been set.
MsgBox("There is no event handler. That makes me sad.")
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
答案来自这里:确定事件是否已附加到
| 归档时间: |
|
| 查看次数: |
10358 次 |
| 最近记录: |