为什么要使用这个构造 - PropertyChangedEventHandler handler = this.PropertyChanged?

stu*_*ree 6 c# propertychanged

文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx具有以下代码示例:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{       
    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是通过引入变量'handler'获得了什么 - 以下代码似乎工作正常:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{   
    if (PropertyChanged!= null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        PropertyChanged(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 5

局部变量背后的原因是,在多线程环境中,事件可能在检查null和触发事件之间的间隙中没有订户(即,变为空).

通过采用局部变量,您可以避免这个潜在的问题 - 以线程安全的方式检查事件.它确实引发了一个问题,即事件可能会被抛出以前未挂钩的项目.