2017-11-21 16 views
-1

はのは、私は二回、このように行うとしましょう:AddHandlerは、removehandler

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

私の調査から、それが加入し、二回毎回を起動します。私が望むように、同じハンドラを何度も購読することができます。

RemoveHandler grid.SelectedIndexChanged, AddressOf doSomething 
  1. が、それは私はまだ1「は、同じ加入者」右したがって、上記のサンプルハンドラに応じて一度呼び出されます持っている意味するだろう:私はこのようなどこかに一度だけ行うとき

    は、しかし、それはどういう意味します一度削除した後に?

  2. 私はそれを追加するだけでハンドラを削除する必要があります。
  3. 特定のイベントに対して、追加したよりも多くのremovehandlerコマンドを実行するとどうなりますか?
  4. 特定のイベントからすべてのサブスクライバを削除する方法はありますか?私は...私も特定の時間shouldn」での場合、時にはそれが、彼はいつものAddHandlerを行う前の開発者によって開発された巨大プロジェクト、多くの異なる場所からハンドラを削除を認識している:説明

ので、私は求めています彼らは同じハンドラーが呼び出される数回実行されても、(彼のremovehandler ..)残っている加入者のいずれかになる!問題は、フォームに「長いライブオブジェクト」が含まれていることです。私はそのプロジェクトに今苦労しています。あなたの助けを借りたいと思っています。

ありがとうございます!

+0

質問1〜3はあなた自身でテストできるものです。ポイント4は、自分でgoogleで簡単にできるものです。たとえば、[this](https://stackoverflow.com/questions/1150250/removing-all-event-handlers-in-one-go) – Detonar

答えて

0

あなたはただ試してみる必要があります。 2つのイベントが呼び出され、1つのイベントが一度に削除されます。

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 

thesequestionsをチェックし、すべてのイベントを削除します。

関連する問題