我已经看到以下用于实现 INotifyPropertyChanged 的模式
private void NotifyPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
有人可以向我解释一下这个的必要性吗var 处理程序 = PropertyChanged在检查 null 之前进行赋值与直接检查属性更改==空直接地?
Thanks
Eric Lippert 在这篇博客文章中详细解释了这一点:活动和比赛 http://blogs.msdn.com/b/ericlippert/archive/2009/04/29/events-and-races.aspx.
基本上,这个想法是避免竞争条件,以防另一个线程在您检查后取消订阅该事件的最后一个处理程序PropertyChanged != null
,但在你实际调用之前PropertyChanged
。如果您制作处理程序的本地副本,则不会发生这种情况(但您最终可能会调用刚刚取消订阅的处理程序)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)