如果有一段我在旧项目中找到的代码片段。我只是想不通为什么我把这个包括在内。
public void AddParking(Parking parking)
{
if (allParkings == null)
{
allParkings = new ObservableCollection<Parking>();
}
allParkings.Add(parking);
if (ParkingAddedEvent != null)
{
ParkingAddedEvent(this, new ParkingAddedEventArgs(parking));
}
}
这是我的ParkingRepository类,它位于模型文件夹中。我正在使用mvvm light toolkit。我只是想知道它在应用程序中有什么功能。
为了说清楚,我正在谈论第二个if语句,使用ParkingAddedEvent。
答案 0 :(得分:1)
首先检查ParkingAddedEvent是否有任何事件侦听器,如果有,则会引发事件。此事件的影响取决于听众。
此处的实现不是线程安全的。以下应该是线程安全的替代方案:
var handler = ParkingAddedEvent;
Thread.MemoryBarrier();
if (handler != null) {
handler(this, new ParkingAddedEventArgs(parking));
}
我使用Thread.MemoryBarrier()
来阻止可以消除局部变量的编译器优化。如果发生这种情况,代码将与您当前的实现相同。
集合初始化程序还存在另一个线程安全问题,但如果从不同的线程调用AddParking()
方法,那只是一个问题。