Tengo este pequeño método que se supone que es seguro para subprocesos. Todo funciona hasta que quiero que tenga valor de retorno en lugar de vacío. ¿Cómo obtengo el valor de retorno cuando se llama a BeginInvoke?Cómo obtener el valor de retorno cuando se invoca BeginInvoke/Invoke en C#
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
} else {
string varText = varControl.Text;
return varText;
}
}
Editar: Supongo que tener BeginInvoke no es nessecary en este caso, ya que necesito valor de interfaz gráfica de usuario antes de que el hilo puede continuar. Entonces, usar Invoke también es bueno. Simplemente no tengo idea de cómo usarlo en el siguiente ejemplo para devolver el valor.
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;
}
}
pero no está seguro cómo conseguir valor con que el código sea;)
Si necesita trabajar con el valor devuelto por una invocación, debe ser porque necesita un patrón de "estilo de continuación de continuación". Que se puede aliviar con 'async',' await' y 'Task'. –