【发布时间】:2010-02-06 17:44:49
【问题描述】:
我有这个应该是线程安全的小方法。一切正常,直到我希望它具有返回值而不是 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来缓解。
标签: c# .net multithreading invoke begininvoke