看了些博客,感觉还是没说清楚,下面说说自己的理解。
在多线程环境下是不允许跨线程修改主线程上窗口控件的,所以在子线程中对控件进行修改应该使用控件的Invoke方法,Invoke方法的定义是在拥有此控件的基础窗口句柄的线程上执行指定的委托。也就是说它会自动寻找创建该控件的线程(一般是主线程),然后在该线程上执行委托里的方法,这就避免了多线程同时操作同一控件,使其状态不确定。窗体本身也具有这个方法,所以如果怕麻烦的话,可以统一用this.Invoke。
言归正传,先贴上一个正确的代码:
delegate void ShowMessageDelegate(string mes);
private void show(string mes)
{
richTextBox1.AppendText(mes);
}
internal void ShowMessage(string message)
{
ShowMessageDelegate deg = show;
richTextBox1.Invoke(deg, message);
}