2009-03-02 44 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框架使用這樣的事件非常廣泛。