2009-03-29 3 views
3

In AC# -Programm für die Simulation eines LAN-Messenger habe ich eine Callback-Funktion für beginreceive, wo ich den Text in einem bestimmten Textfeld angezeigt .. this.textBox1.Text = sb.ToString (); Allerdings bekomme ich eine Cross-Thread-Operation nicht gültig Fehler. Ich weiß, dass ich die object.invoke-Methode verwenden muss, aber Sie können mir bitte den vollständigen Code, um einen Delegierten aufzurufen, weil immer noch naiv, wenn es um Threading geht. DankeC# Cross-Thread-Operation Fehler

Antwort

8

Sie müssen die Arbeit schieben zurück auf die Benutzeroberfläche; Glücklicherweise ist es einfach:

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

Dies verwendet die „anonyme Methode“ und „erfassten Variablen“ Eigenschaften von C# alle schweres Heben zu tun. In .NET 3.5, können Sie es vorziehen Action zu verwenden, aber das macht keinen Unterschied:

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

Sie können es auf diese Weise verwenden:

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