如何等待Dispatcher Invoke的结果?

时间:2016-09-11 16:53:55

标签: c# wpf

我想我在这里遗漏了一些东西。我有一个WPF表单,它有一些方法,我需要从外部源(通常在非UI线程)调用。我检索对表单的引用,然后尝试通过Dispatcher.Invoke调用该方法,以便它被编组到UI线程。问题是这个代码不会起作用,因为Invoke触发一个Action,所以结果总是一个空字符串(即使文档说Invoke应该是同步的)。

    public string GetValueById(string id, string value)
    {
        Application.Current.Dispatcher.Invoke(() =>
        {
            var main = Application.Current.MainWindow as MainWindow;
            if (main != null)
            {
                return main.GetValue(id);
            }
        });            
        return "";
    }

我无法完全理解如何使这项工作。

1 个答案:

答案 0 :(得分:7)

如果查看the documentation for that Dispatcher.Invoke overload,您会看到如果您传递Func<TResult>回调,那么它将返回执行该回调返回的TResult。您所要做的就是实际使用返回值:

public string GetValueById(string id, string value)
{
    return Application.Current.Dispatcher.Invoke(() =>
    {
        var main = Application.Current.MainWindow as MainWindow;
        if (main != null)
        {
            return main.GetValue(id);
        }
    });
}