C#

[C#] ラムダ式で記述したイベントハンドラの登録削除

イベントハンドラをラムダ式を使って記述すると次のようになります。

    hoge.Closed += (s, e) =>
    {
        // 処理
    };

 

これはこれでよいのですが、イベントハンドラの登録を削除することができません。
イベント処理を一度のみ行いたい場合等に、フラグなどを使ってイベントハンドラ内で処理するのかどうかを見なければならなくなってしまいます。

では、ラムダ式で実装したイベントハンドラを削除したい場合はどのようにすればよいか?
というのが今回の話。
 

ラムダ式を使って、且つ、イベント処理後にイベントハンドラを削除したい場合は、
次のようにEventHandlerを経由して記述します。

    EventHandler handler = null;
    handler = (s, e) =>
    {
        //処理

        //==== イベントハンドラの登録削除 ====//
        hoge.Closed -= handler;
    };

    //==== イベントハンドラを登録 ====//
    hoge.Closed += handler;

 
 

-C#
-,