Ich habe diese kleine Methode, die threadsicher sein soll. Alles funktioniert, bis ich möchte, dass es einen Rückgabewert anstelle von void hat. Wie bekomme ich den Rückgabewert, wenn BeginInvoke aufgerufen wird?Wie bekomme ich den Rückgabewert, wenn BeginInvoke/Invoke aufgerufen wird in C#
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
} else {
string varText = varControl.Text;
return varText;
}
}
Edit: Ich denke, die BeginInvoke ist in diesem Fall nicht nessecary als i Wert von GUI muß, bevor der Thread fortgesetzt werden kann. Die Verwendung von Invoke ist also ebenfalls gut. Keine Ahnung, wie man es im folgenden Beispiel verwendet, um einen Wert zurückzugeben.
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;
}
}
aber nicht sicher, wie Wert zu erhalten, dass Code entweder mit;)
Wenn Sie mit dem Wert arbeiten müssen, der von einem Aufruf zurückgegeben wird, muss das sein, da Sie ein "Continuation Passing Style" -Muster benötigen. Was mit 'async',' await' und 'Task' gemildert werden kann. –