gpt4 book ai didi

c# - 为什么要使用这个构造 - PropertyChangedEventHandler handler = this.PropertyChanged?

转载 作者:太空狗 更新时间:2023-10-29 21:36:33 24 4
gpt4 key购买 nike

文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx具有以下代码示例:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}

我的问题是通过引入变量“handler”获得了什么——下面的代码似乎工作正常:

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged!= null)
{
var e = new PropertyChangedEventArgs(propertyName);
PropertyChanged(this, e);
}
}

最佳答案

局部变量背后的原因是,在多线程环境中,在检查 null 和触发事件之间的间隙,事件可能没有订阅者(即变为 null)。

通过采用局部变量,您可以避免这个潜在的问题 - 以线程安全的方式检查事件。它确实提出了一个问题,即可能会为之前未 Hook 的项目抛出该事件。

关于c# - 为什么要使用这个构造 - PropertyChangedEventHandler handler = this.PropertyChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4489709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com