如何在C#中实现取消事件

Sak*_*o73 20 .net c# events

我知道在C#中,有几个内置事件传递参数("取消"),如果设置为true,将停止在引发事件的对象中进一步执行.

如何实现一个事件,其中提升对象能够跟踪EventArgs中的属性?

这是我想要做的WinForms示例:
http://msdn.microsoft.com/en-us/library/system.componentmodel.canceleventargs.cancel.aspx

谢谢.

Jon*_*gel 16

这真的很容易.

private event _myEvent;

// ...

// Create the event args
CancelEventArgs args = new CancelEventArgs();

// Fire the event
_myEvent.DynamicInvoke(new object[] { this, args });

// Check the result when the event handler returns
if (args.Cancel)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • 很明显.那是其中的一天.非常感谢你. (2认同)

小智 14

一旦其中一个断言取消,我就避免调用其他订阅者的方式:

var tmp = AutoBalanceTriggered;
if (tmp != null)
{
    var args = new CancelEventArgs();
    foreach (EventHandler<CancelEventArgs> t in tmp.GetInvocationList())
    {
        t(this, args);
        if (args.Cancel)  // a client cancelled the operation
        {
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)