イベントをキャンセルさせる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
うまくいってますね。