从另一个线程返回对象?

时间:2010-05-08 01:35:08

标签: c# wpf

尝试关注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不会返回任何内容。我该怎么办?

1 个答案:

答案 0 :(得分:2)

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

如果您不立即需要结果,请按住DispatcherOperation返回的BeginInvoke。当您需要结果时,请调用操作的Wait方法,如果它返回DispatcherOperationStatus.Completed,请阅读Result属性。