NotifyPropertyChanged线程安全吗?

时间:2011-10-27 08:55:59

标签: c# wpf silverlight

我正在查看来自NotifyPropertyChanged()的{​​{1}}并注意到来自微软的示例,例如:

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

首先没有捕获委托引用(正如它在此处所说的那样:Use of null check in event handler

我查看了ServiceReferences自动生成的Reference.cs,并完成了此检查。

所以我的问题是我应该这样做(以任何形式,如扩展方法等)?如果我不这样做会有任何问题吗?

1 个答案:

答案 0 :(得分:7)

你是对的,检查应该完成,他们的例子是错误的。

以下是标准代码。

private void NotifyPropertyChanged(String propertyName)
{
    var handler = PropertyChanged;
    if (handler != null)
    {
        handler (this, new PropertyChangedEventArgs(propertyName));
    }
}

修改:进一步解释为什么需要这样做(及其工作原理)

在MS示例中,他们直接在PropertyChanged上执行空检查,然后调用它。因此,PropertyChanged可能在null检查和调用之间变为null。通过将委托分配给局部变量,我们可以确保保留对委托的引用,并且它不能在空检查和调用之间进行更改。