摘自msdn
// 代理实现异步调用以设置richTextBox控件text属性
delegate void SetTextCallback(string text);
// 如果调用线程和创建TextBox控件的线程不同,这个方法创建
// 代理SetTextCallback并且自己通过Invoke方法异步调用它
// 如果相同则直接设置Text属性
private void SetText(string text)
{
// InvokeRequired需要比较调用线程ID和创建线程ID
// 如果它们不相同则返回true
if (this.tbxMessage.InvokeRequired)
{
if (!this.IsDisposed)
{
SetTextCallback d = new SetTextCallback(SetText);
this.BeginInvoke(d, new object[] { text });
}
}
else
{
tbxMessage.AppendText(text + "\n");
tbxMessage.ScrollToCaret();
}
}