从另一个线程返回对象?

mpe*_*pen 5 c# wpf

试着按照这里列出提示,但是当你的集合需要返回一个值时,她没有提到如何处理它,如下所示:

    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不返回任何东西.我应该做些什么?

Mar*_*tos 2

调用Invoke代替BeginInvoke. 这将在调度程序的线程上运行它,但将同步执行并返回委托返回的结果。

如果您不需要立即得到结果,请保留DispatcherOperation返回的BeginInvoke。当您确实需要结果时,调用操作的Wait方法,如果返回DispatcherOperationStatus.Completed,则读取Result属性。