イベントをキャンセルさせるCancelEventArgs

プログラミングC# 第6版 5.8


イベント処理を途中でキャンセルさせる方法ですね。

using System;
using System.ComponentModel; // CancelEventArgsのために必要

class CClass {
    // CancelEventArgsを使うためにジェネリックにする
    public event EventHandler<CancelEventArgs> Begin;
    
    public void Proc () {
        if ( Begin != null ) {
            // CancelEventArgsを渡す
            CancelEventArgs ce = new CancelEventArgs();
            Begin(this,ce);
            
            // イベント中にキャンセルが発生していたらProcの処理を中断する
            if ( ce.Cancel == true ) {
                Console.WriteLine("CClass.Proc Cancel");
                return;
            }
        }
        
        Console.WriteLine("CClass.Proc");
    }
}

class Program {
    static void Main () {
        CClass cobj = new CClass();
        
        cobj.Begin += (sender,e) => {
            Console.WriteLine("Begin1");
        };
        cobj.Begin += (sender,e) => {
            Console.WriteLine("Begin2");
            // キャンセル発生!
            e.Cancel = true;
        };
        cobj.Proc();
    }
}
$ main
Begin1
Begin2
CClass.Proc Cancel

うまくいってますね。