如何等待Dispatcher Invoke的结果?

Pau*_*ski 0 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 "";
    }
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ger 7

如果你查看Dispatcher.Invoke重载的文档,你会看到如果你传递一个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);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)