在用于模拟 LAN Messenger 的 C# 程序中,我有一个用于 beginreceive 的回调函数,我需要在其中显示在特定文本框中接收到的文本。 this.textBox1.Text = sb.ToString(); 但是这样做时,我收到了一个跨线程操作无效错误。 我确实意识到我需要使用 object.invoke 方法,但是你能不能给我提供调用委托(delegate)的完整代码,因为在线程处理方面我仍然很天真。谢谢
最佳答案
您需要将工作推回到 UI 上;幸运的是,这很容易:
this.Invoke((MethodInvoker) delegate {
this.textBox1.Text = sb.ToString();
});
这使用 C# 的“匿名方法”和“捕获变量”功能来完成所有繁重的工作。在 .NET 3.5 中,您可能更喜欢使用 Action
,但这并没有什么区别:
this.Invoke((Action) delegate {
this.textBox1.Text = sb.ToString();
});
关于C#跨线程操作报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694397/