试着按照这里列出的提示,但是当你的集合需要返回一个值时,她没有提到如何处理它,如下所示:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为dispatcher.BeginInvoke不返回任何东西.我应该做些什么?
调用Invoke代替BeginInvoke. 这将在调度程序的线程上运行它,但将同步执行并返回委托返回的结果。
如果您不需要立即得到结果,请保留DispatcherOperation返回的BeginInvoke。当您确实需要结果时,调用操作的Wait方法,如果返回DispatcherOperationStatus.Completed,则读取Result属性。
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |