让我说我喜欢这两次:
AddHandler grid.SelectedIndexChanged, AddressOf doSomething
AddHandler grid.SelectedIndexChanged, AddressOf doSomething
从我的调查中,它将被订阅并每次两次启动。意味着我可以根据需要订阅相同的处理程序。
但是这意味着当我只在这样做一次这样的时候:
RemoveHandler grid.SelectedIndexChanged, AddressOf doSomething
- 这是否意味着我还有一个“相同的订阅者”权利因此根据上面的示例处理程序将在删除一次后被调用一次?
- 事实上,我必须像添加它一样删除处理程序吗?
- 当我为特定事件执行比我添加的更多removehandler命令时呢?
- 有没有办法从特定事件中删除所有订阅者?我问,因为
醇>
说明:我有一个由前任开发人员开发的大项目,他总是在做addhandler,从很多不同的地方删除处理程序......我认识到有时即使在特定的时间不应该是任何一个订阅者离开(他的删除处理程序..)他们甚至运行几次相同的处理程序被称为!问题是表单包含“长寿命对象”,我现在正在努力解决该项目。希望得到你的帮助。
谢谢!
答案 0 :(得分:0)
你只需要尝试一下。将调用两个事件,一次删除一个事件。
Module Module1
Delegate Sub TestDelegate()
Event TestEvent As TestDelegate
Sub Main()
AddHandler TestEvent, AddressOf TestFunc
AddHandler TestEvent, AddressOf TestFunc
Console.WriteLine("---")
RaiseEvent TestEvent() ' 'a' writted twice
RemoveHandler TestEvent, AddressOf TestFunc
Console.WriteLine("---")
RaiseEvent TestEvent() ' 'a' written once
RemoveHandler TestEvent, AddressOf TestFunc
Console.WriteLine("---")
RaiseEvent TestEvent() ' 'a' not written
RemoveHandler TestEvent, AddressOf TestFunc ' No error hapenning
Console.ReadLine()
End Sub
Public Sub TestFunc()
Console.WriteLine("a")
End Sub
End Module