有人可以向我解释为什么这段代码不会导致死锁吗?
static Object listlock = new Object();
void StartAsync()
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
lock(listlock)
base.OnPropertyChanged("MyList");
});
}
public ObservableCollection<MyObjects> MyList
{
get
{
lock(listlock)
return new ObservableCollection<MyObjects>(_myObjectList);
}
}
一些背景细节:
该程序使用MVVM模式并且MyList绑定到WPF UI上的Datagrid。_myObjects只是一个随机的对象列表。
是因为OnPropertyChange只是通知 UI 它必须从 MyList 获取新数据并且只是返回而不关心 UI 是否实际获取数据?我知道 OnPropertyChanged 是在单独的线程上调用的,但 UI 存在于单个线程上(不是吗),因此获得通知的线程也是获取数据的线程。我会认为锁不会因此而无法释放?