一千萬個為什麽

搜索

關於自定義事件的問題

我正在為C#制作自定義事件,有時它不起作用。

這就是我讓事件發生的方式:

    private bool isDoorOpen;
    public bool IsDoorOpen {
        get { return isDoorOpen;}
        private set { isDoorOpen = value; DoorsChangeState(this, null);}
    }

這些是事件聲明:

    //events        
    public delegate void ChangedEventHandler(Elevator sender, EventArgs e);
    public event ChangedEventHandler PositionChanged;
    public event ChangedEventHandler DirectionChanged;
    public event ChangedEventHandler BreaksChangeState;
    public event ChangedEventHandler DoorsChangeState;

只要有事件附加了方法,這就有效,但如果沒有,則拋出空引用異常。我究竟做錯了什麽?

最佳答案

調用事件的推薦方法是

var handler = this.DoorsChangeState;
if (handler != null)
    handler(this, null);

在本地復制處理程序的原因是當您檢查null時,在另一個線程上更改事件處理程序。

EDIT: Found the article talking about race conditions. http://blogs.msdn.com/ericlippert/archive/2009/04/29/events-and-races.aspx

轉載註明原文: 關於自定義事件的問題