Addhandler,removehandler

时间:2017-11-21 12:39:51

标签: vb.net

让我说我喜欢这两次:

AddHandler grid.SelectedIndexChanged, AddressOf doSomething
AddHandler grid.SelectedIndexChanged, AddressOf doSomething

从我的调查中,它将被订阅并每次两次启动。意味着我可以根据需要订阅相同的处理程序。

但是这意味着当我只在这样做一次这样的时候:

RemoveHandler grid.SelectedIndexChanged, AddressOf doSomething
  
      
  1. 这是否意味着我还有一个“相同的订阅者”权利因此根据上面的示例处理程序将在删除一次后被调用一次?
  2.   
  3. 事实上,我必须像添加它一样删除处理程序吗?
  4.   
  5. 当我为特定事件执行比我添加的更多removehandler命令时呢?
  6.   
  7. 有没有办法从特定事件中删除所有订阅者?我问,因为
  8.   

说明:我有一个由前任开发人员开发的大项目,他总是在做addhandler,从很多不同的地方删除处理程序......我认识到有时即使在特定的时间不应该是任何一个订阅者离开(他的删除处理程序..)他们甚至运行几次相同的处理程序被称为!问题是表单包含“长寿命对象”,我现在正在努力解决该项目。希望得到你的帮助。

谢谢!

1 个答案:

答案 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

要删除所有活动,请检查these questions