如果你调用dispatcherOperation.Wait()
一个已经完成的操作会发生什么?此外,文档说它返回 a DispatcherOperationStatus
,但不是总是这样,Completed
因为它(据说)在完成之前不会返回?
我试图这样使用它:
private void Update()
{
while (ops.Count > 0) ops.Dequeue().Wait();
}
public void Add(T item)
{
lock (sync)
{
if (dispatcher.CheckAccess())
{
list.Add(item);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
}
else
{
ops.Enqueue(dispatcher.BeginInvoke(new Action<T>(Add), item));
}
}
}
我在 WPF 中使用它,所以所有Add
操作都必须发生在 UI 线程上,但我想我基本上可以将它们排队,而不必等待它切换线程,然后Update()
在任何读取操作之前调用以确保该列表是最新的,但我的程序开始挂起。