2009-03-29 4 views
3

Dans le programme aC# pour simuler un messager de réseau local, j'ai une fonction de rappel pour le début de réception où j'ai besoin d'afficher le texte reçu dans une zone de texte particulière.) Cependant, ce faisant, j'obtiens une opération d'exécution croisée qui n'est pas une erreur valide. Je me rends compte que j'ai besoin d'utiliser la méthode object.invoke mais pourriez-vous s'il vous plaît me fournir le code complet pour invoquer un délégué parce que je suis encore naïf quand il s'agit de threading.MerciErreur d'opération de cross-thread C#

Répondre

8

Vous devez pousser le travail retour sur l'interface utilisateur; Heureusement, il est facile:

this.Invoke((MethodInvoker) delegate { 
    this.textBox1.Text = sb.ToString(); 
}); 

Cette utilise les fonctionnalités « méthode anonyme » et « variables capturées » de C# pour faire tout le levage de charges lourdes. Dans .NET 3.5, vous pouvez préférer utiliser Action, mais cela ne fait aucune différence:

this.Invoke((Action) delegate { 
    this.textBox1.Text = sb.ToString(); 
}); 
3

Vous pouvez l'utiliser de cette manière:

void MyCallback(IAsyncResult result) 
{ 
if (textBox1.InvokeRequired) { 
    textBox1.Invoke(new Action<IAsyncResult>(MyCallBack),new object[]{result}); 
    return; 
} 
// your logic here 
}