2
我找不到這個簡單問題的答案:BeginInvoke()保證以原子方式執行被調用的委託? 舉例來說,如果我有像Dispatcher.BeginInvoke()是否以原子方式工作?
public ObservableCollection<string> Items;
public int TotalLenght;
delegate void AddItemDelegate(string arg);
Dispatcher _dispatcher=Dispatcher.CurrentDispatcher;
void StartExecute()
{
for (int index = 0; index < 10; index++)
{
Thread th=new Thread(Run);
th.Start();
}
}
void Run()
{
string item = DoLongRandomDuringCalculations();
_dispatcher.BeginInvoke(new AddItemDelegate(AddItem), item);
}
void AddItem(string item)
{
Items.Add(item);
TotalLength += item.Length;
TakeSnapshot();
}
我儘管放心,我們的更新,以收集和其他成員始終是同步的,另外,如果計算線程調用BeginInvoke的準確而另一個線程處於中間更新?
提示:在哪個線程/執行上下文上Dispatcher運行排隊的動作? – 2012-05-30 04:52:50