C#交叉线程操作错误

C#交叉线程操作错误,c#,multithreading,C#,Multithreading,在一个模拟lan messenger的c#程序中,我有一个用于beginreceive的回调函数,需要在特定的文本框中显示接收到的文本。。 this.textBox1.Text=sb.ToString(); 然而,在这样做时,我得到了一个跨线程操作无效的错误。 我确实意识到我需要使用object.invoke方法,但是你能给我提供调用委托的完整代码吗,因为我在线程方面还很幼稚。谢谢你,你需要把工作推回到UI上;幸运的是,这很容易: this.Invoke((MethodInvoker) dele

在一个模拟lan messenger的c#程序中,我有一个用于beginreceive的回调函数,需要在特定的文本框中显示接收到的文本。。 this.textBox1.Text=sb.ToString(); 然而,在这样做时,我得到了一个跨线程操作无效的错误。
我确实意识到我需要使用object.invoke方法,但是你能给我提供调用委托的完整代码吗,因为我在线程方面还很幼稚。谢谢你,你需要把工作推回到UI上;幸运的是,这很容易:

this.Invoke((MethodInvoker) delegate {
    this.textBox1.Text = sb.ToString();
});
它使用C#的“匿名方法”和“捕获变量”特性来完成所有繁重的工作。在.NET 3.5中,您可能更喜欢使用
操作
,但这并没有真正的区别:

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

您可以这样使用它:

void MyCallback(IAsyncResult result)
{
if (textBox1.InvokeRequired) {
    textBox1.Invoke(new Action<IAsyncResult>(MyCallBack),new object[]{result});
    return;
}
// your logic here
}
void MyCallback(IAsyncResult结果)
{
if(textBox1.invokererequired){
调用(新操作(MyCallBack),新对象[]{result});
返回;
}
//你的逻辑在这里
}