【发布时间】:2012-05-30 14:23:46
【问题描述】:
我找不到这个简单问题的答案: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 在哪个线程/执行上下文上运行排队的操作?
标签: c# wpf multithreading dispatcher