繁体   English   中英

处理程序覆盖CancelEventArgs上的Cancel属性

[英]Handlers overwriting Cancel property on CancelEventArgs

CancelEventArgs提供了一个名为Cancel的属性,不同的事件处理程序可以设置为告诉调用该事件的对象是否应该继续执行取消该操作。

似乎由于事件是多播委托,因此简单地引发事件可能会调用两个委托。 第一个将Cancel属性设置为true,第二个将Cancel属性设置为false。 组件/框架'可取消'事件是否支持这些场景并逐个调用每个委托,在每一步检查取消标记? 提出这类活动的最佳做法是什么? 是否只有一个CancelEventArgs实例传递给每个委托? 使用单独的实例吗?

一个小实验很快就表明它们使用了1个Cancel实例(可能是EventArgs对象)。

这使得它有点赌博,结果取决于Eventhandler附加的顺序。

在CancelEventArgs的特定情况下,我认为正确的模式是将Cancel设置为true或保持不变,因此顺序无关紧要。

测试:

public static void Main() {
    Event += (sender, e) => e.Cancel = true;
    Event += (sender, e) => e.Cancel = false;
    Event += (sender, e) => e.Cancel = true;

    var args = new CancelEventArgs();
    Event(null, args);

    WL(args.Cancel);
}

static event EventHandler<CancelEventArgs> Event;

附加事件处理程序的顺序很重要。

一般来说,具有非不可变事件args和多播委托的事件不应该一起使用,但.NET框架会非常广泛地使用此类事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM