2009-03-29 20 views
3

lanメッセンジャーをシミュレートするためのac#プログラムでは、特定のテキストボックスで受け取ったテキストを表示する必要があるbeginreceiveのコールバック関数を持っています。 this.textBox1.Text = sb.ToString ); しかし、これを行うには、クロススレッド操作が有効なエラーではありません。 私はobject.invokeメソッドを使用する必要があることを認識していますが、スレッディングに関してはまだ素朴なので、デリゲートを呼び出すための完全なコードを私に提供してください。C#クロススレッド操作エラー

答えて

8

作業をプッシュする必要がありますUIに戻す。幸いにも、それは簡単です:

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

これは、すべての重労働を行うには、「匿名メソッド」とC#の「捕獲変数」機能を使用しています。 .NET 3.5では、あなたはActionを使用することを好むかもしれないが、それは本当の違いはありません:

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

あなたはこの方法でそれを使用することができます。

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