我想我在这里遗漏了一些东西。我有一个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 "";
}
我无法完全理解如何使这项工作。
答案 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);
}
});
}