尝试关注hints laid out here,但在收集需要返回值时,她没有提及如何处理它,如下所示:
private delegate TValue DequeueDelegate();
public virtual TValue Dequeue()
{
if (dispatcher.CheckAccess())
{
--count;
var pair = dict.First();
var queue = pair.Value;
var val = queue.Dequeue();
if (queue.Count == 0) dict.Remove(pair.Key);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, val));
return val;
}
else
{
dispatcher.BeginInvoke(new DequeueDelegate(Dequeue));
}
}
这显然不起作用,因为dispatcher.BeginInvoke
不会返回任何内容。我该怎么办?
答案 0 :(得分:2)
致电Invoke
代替BeginInvoke
。这将在调度程序的线程上运行它,但会同步执行并返回委托返回的结果。
如果您不立即需要结果,请按住DispatcherOperation
返回的BeginInvoke
。当您需要结果时,请调用操作的Wait
方法,如果它返回DispatcherOperationStatus.Completed
,请阅读Result
属性。