NotifyPropertyChanged线程安全吗?

本文关键字:安全 线程 NotifyPropertyChanged | 更新日期: 2023-09-27 18:12:44

我正在查看INotifyPropertyChanged中的NotifyPropertyChanged(),并注意到在微软的示例中,例如这里:

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

没有首先捕获委托引用(就像这里所说的:在事件处理程序中使用null检查)

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

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

NotifyPropertyChanged线程安全吗?

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

以下是标准代码。

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

编辑:关于为什么需要(以及为什么它有效)的进一步解释

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