2009-03-02 38 views
3

CancelEventArgs财产提供了一个叫做物业取消,不同的事件处理程序可以设置成告诉调用该事件是否应该继续执行取消操作的对象。处理程序重写取消对CancelEventArgs

看来,因为事件多路广播委托,对事件的简单加薪可能援引两名代表。第一个将Cancel属性设置为true,第二个将Cancel属性设置为false。组件/框架'可取消'事件是否支持这些场景并逐个调用每个委托,在每个步骤检查取消标志?提出这些类型的事件的最佳做法是什么?是否只有一个CancelEventArgs实例传递给每个委托?是使用单独的实例吗?

回答

2

一个小实验很快表明,他们所使用的1个实例取消(可能的EventArgs对象)。

这使得它有点赌博的,根据与其中事件处理附着订单上的结果。

在CancelEventArgs的特定情况下,我认为正确的模式将取消设置为true或息事宁人,所以为了不应该的问题。

1

测试:

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; 

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

一般来说,非一成不变的事件参数和多路广播委托的事件不应该一起使用,但是.NET框架使用这样的事件非常广泛。