このコードがデッドロックを引き起こさない理由を説明してもらえますか?
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はWPFUIのデータグリッドにバインドされています。_myObjectsは、オブジェクトの単なるランダムなリストです。OnPropertyChange
は、MyListから新しいデータを取得する必要があることをUIに通知し、UIが実際にデータを取得するかどうかを気にせずに戻るためですか?OnPropertyChangedが別のスレッドで呼び出されることは知っていますが、UIは単一のスレッドに存在するため(Ooではありません)、通知を受けるスレッドはデータを取得するスレッドでもあります。そのせいでロックが解除できなかったと思いますか?