0

Visual Basic .NET でのイベント ハンドラーの追加と削除で少し問題が発生しました。これは一般的にかなり簡単ですが、インライン イベント ハンドラーを削除する必要があります。問題は、これがどのように機能するかです。

AddHandler object.ConnectionSuccessful, Sub()
                                            RemoveHandler object.ConnectionSuccessful, Me
                                        End Sub

これは私が試した方法ですが、うまくいきません。問題は、この方法ではない場合、このインライン イベント ハンドラを再度削除するにはどうすればよいかということです。オブジェクトからすべてのイベント ハンドラーを削除する残酷な方法をいくつか見つけましたが、これは私がやりたいことではありません。この 1 つの特定のイベント ハンドラーのみを削除したいです。

AddressOf通常の関数と演算子を使用するだけで、これらの問題が解消されることを認識しています。ただし、この場合、インライン メソッドを使用する方が便利です。

誰でもこの問題について考えがありますか?

4

1 に答える 1

1

ラムダを変数に割り当てると、これを行うことができます (このようなインライン構造が必要なものに近いと仮定します)。Actionこの場合、それ自体からそれ自体を参照するために、ラムダを入力する必要があることに注意してください。

Module Module1

Event TestEvent As Action

Sub Main()

    Dim TestLamba As Action = Sub()
                                  Console.Write("Event!")
                                  RemoveHandler TestEvent, TestLamba
                              End Sub

    AddHandler TestEvent, TestLamba

    RaiseEvent TestEvent()

    RaiseEvent TestEvent()

    Console.ReadKey()

End Sub

End Module

上記のテスト コンソール アプリを実行すると、イベントが 2 回発生することがわかりますが、"Event!" です。コンソールに一度だけ書き込まれます。

于 2012-10-17T16:21:46.933 に答える