试图跟随 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
不返回任何内容。我该怎么办?
最佳答案
调用 Invoke
代替 BeginInvoke
。这将在调度程序的线程上运行它,但将同步执行并返回委托(delegate)返回的结果。
如果您不需要立即得到结果,请保留 BeginInvoke
返回的 DispatcherOperation
。当您确实需要结果时,调用操作的 Wait
方法,如果它返回 DispatcherOperationStatus.Completed
,请读取 Result
属性。
关于c# - 从另一个线程返回对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792598/