我有一个小方法,这个方法应该是线程安全的。一切都运行良好,直到我想让它返回一个值而不是 void 时。当调用 BeginInvoke 时,我如何获取返回值?
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
} else {
string varText = varControl.Text;
return varText;
}
}
编辑:我猜在这种情况下拥有BeginInvoke并不是必要的,因为我需要从GUI获取值,然后线程才能继续。所以使用Invoke也很好。只是不知道如何在以下示例中使用它来返回值。
private delegate string ControlTextRead(Control varControl);
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.Invoke(new ControlTextRead(readControlText), new object[] {varControl});
} else {
string varText = varControl.Text;
return varText;
}
}
但我也不确定如何使用那段代码来获取值 ;)
async
、await
和Task
来缓解。 - v.oddou