2010-01-22 75 views
1

问候,即时通讯编程新手。C#调用动作跨线程访问

此刻,我的应用程序使用委托来处理/执行驻留在另一个类/对象中的方法。

但我得到一个错误,指出他们居住在separte线程。所以在搜索网络后,我想出了这个:

this.Invoke(new Action(delegate() { this.ChatRichTextBox.AppendText(EventArgs.commMessage); })); 

这工作得很好接受我不知道发生了什么事情。我只是粘贴了代码,它的工作。

目前虽然我需要这样做,因为编译器说它不能在此操作中执行> <!=操作。

请告知如何最好地实现这一点?

非常感谢。

+0

我不明白你的意思,当你说 “它不能做><=操作!”。你可以发布该代码吗? – hackerhasid 2010-01-22 17:48:22

+0

我会,但我现在离开我的电脑。直到那时。谢谢。 – iTEgg 2010-01-22 18:35:01

回答

4

对Windows窗体控件的访问是 本质上不是线程安全的。如果 有两个或更多个线程操纵控件的状态,则可能有 强制控件进入不一致状态 。其他 线程相关的错误是可能的,例如 作为竞争条件和死锁。它 对于确保以 线程安全的方式执行对您的控件的访问 非常重要。

如果不使用Invoke 方法,调用不同于 控件的 线程来调用控件是不安全的。

+0

这与<!=操作有关吗? – 2010-01-22 19:33:58

+0

它解释了跨线程操作(OP没有理解) – 2010-01-22 23:10:11