我想我在这里遗漏了一些东西.我有一个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)
我无法完全理解如何使这项工作.
如果你查看该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)