J'ai cette petite méthode qui est censée être thread-safe. Tout fonctionne jusqu'à ce que je le veuille avoir la valeur de retour au lieu du vide. Comment puis-je obtenir la valeur de retour lorsque BeginInvoke est appelé?Comment obtenir la valeur de retour lorsque BeginInvoke/Invoke est appelé en C#
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
} else {
string varText = varControl.Text;
return varText;
}
}
Edit: Je suppose avoir BeginInvoke n'est pas nessecary dans ce cas, comme je l'ai besoin valeur de GUI avant que le thread peut continuer. Donc, en utilisant Invoke est bon aussi. Juste aucune idée comment l'utiliser dans l'exemple suivant pour retourner la valeur.
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;
}
}
Mais pas sûr comment obtenir la valeur en utilisant ce code soit;)
Si vous devez travailler avec la valeur renvoyée par un appel, cela doit être dû au fait que vous avez besoin d'un modèle de "style de transition continue". Ce qui peut être allégé avec 'async',' await' et 'Task'. –