C# NotifyPropertyChanged线程安全吗?
我正在查看C# NotifyPropertyChanged线程安全吗?,c#,wpf,silverlight,C#,Wpf,Silverlight,我正在查看INotifyPropertyChanged中的NotifyPropertyChanged(),并注意到在Microsoft的示例中,例如: 没有先捕获委托引用(如此处所述,例如:) 我在自动生成的Reference.cs中查看了我的ServiceReferences,该检查已完成 所以我的问题是我应该这样做(以任何形式,比如扩展方法等)?如果我不这样做,是否存在任何可能的问题?你是对的,应该进行检查,并且他们的示例是错误的 下面是标准代码 private void NotifyPr
INotifyPropertyChanged
中的NotifyPropertyChanged()
,并注意到在Microsoft的示例中,例如:
没有先捕获委托引用(如此处所述,例如:)
我在自动生成的Reference.cs中查看了我的ServiceReferences,该检查已完成
所以我的问题是我应该这样做(以任何形式,比如扩展方法等)?如果我不这样做,是否存在任何可能的问题?你是对的,应该进行检查,并且他们的示例是错误的 下面是标准代码
private void NotifyPropertyChanged(String propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler (this, new PropertyChangedEventArgs(propertyName));
}
}
编辑:进一步解释为什么需要这样做(以及为什么这样做有效)
在MS示例中,它们直接对PropertyChanged执行空检查,然后调用它。因此,在null检查和调用之间,PropertyChanged有可能变为null。通过将委托分配给局部变量,我们可以确保保留对委托的引用,并且它不能在null检查和调用之间更改。好的,我看到的Microsoft示例似乎不是最好的。谢谢你的回答,在微软的例子中,他们就是这么做的。。。我是瞎子吗?@fantasticfix PropertyChanged必须复制到局部变量first@fantasticfix是:)他们没有将委托分配给变量。所以它可能在空检查和调用它之间发生了变化。。。只是想写下,即使你避免了空引用,这也不会是线程保存。收回:)