原因:默认情况下,C#不允许在一个线程中直接操作另一个线程中的控件,这是因为访问Windows窗体控件本质上不是线程安全的。如果有两个或多个线程同时操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态,还可能会出现其他与线程相关的Bug,以及不同线程争用控件引起的死锁问题。因此确保以线程安全方式访问控件非常重要。
解决办法1:窗体启动的时候取消跨线程检查。这种方法是不科学的,不推荐。
1 //取消跨线程检查。 2 Control.CheckForIllegalCrossThreadCalls = false;
解决方法2:用委托的方式。
1 this.Invoke((MethodInvoker)delegate 2 { 3 richTextBox1.AppendText("要追加的内容"); 4 });
End。