c# - 从另一个线程返回对象?

标签 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 不返回任何内容。我该怎么办?

最佳答案

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

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

关于c# - 从另一个线程返回对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792598/

相关文章:

c# - 在程序集中找不到 MS.Internal.Media 命名空间

c# - 如何将此 PowerShell 脚本转换为 C#? - 获取项目属性

c# - 如何在 C# 中运行时更改 IObservable Func 谓词

c# - DataTable.Compute 计算十进制表达式时失败

c# - 如何创建可以显示不同类型对象的 C# WPF DataGrid?

c# - 在 WPF 中填充 ListView 项目

参数数量可变的 Java "Virtual"方法

wpf - 如何在列表框中显示 Powershell 输出数组

wpf - WPF工具栏项目Horizo​​ntalAligment =“右”

c# - WPF:日期时间选择器选择问题