NotifyPropertyChanged线程安全吗?

我正在从INotifyPropertyChanged查看NotifyPropertyChanged()并注意到在Microsoft的示例中,例如:

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

首先没有捕获委托引用(例如,它在这里说: 在事件处理程序中使用null check )

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

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

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

以下是标准代码。

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

编辑:进一步解释为什么需要这个(以及它为什么工作)

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