C#交叉线程操作错误

时间:2009-03-29 09:53:22

标签: c# multithreading

在用于模拟lan messenger的c#程序中,我有一个beginreceive的回调函数,我需要显示在特定文本框中收到的文本。 this.textBox1.Text = sb.ToString(); 但是,这样做,我得到一个跨线程操作无效错误。 我确实意识到我需要使用object.invoke方法但你可以请我提供完整的代码来调用委托,因为在涉及线程时我仍然天真。谢谢你

2 个答案:

答案 0 :(得分: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();
});

答案 1 :(得分:3)

您可以这样使用它:

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