Worker线程不能修改UI线程的状态(比如文本框里面的内容)。
解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文本框。
具体代码如下:
void ThreadEntry() { int i = 1; string name = Thread.CurrentThread.Name; while (i > 0) { Thread.Sleep(1000); dsync.WaitOne(); //WaitOne方法是阻塞方法,如果 string msg = string.Format("The current index is {0}", i); this.BeginInvoke(new ShowDelegate(ShowMsgBox), msg); i++; } }
调用方法: private void OK_Click(object sender, EventArgs e) { Thread worker = new Thread(ThreadEntry); worker.Start(); } 更新方法: private void ShowMsgBox(string tmp) { logOutput.Text += tmp + "\r\n"; }
BTW,如果需要控制工作线程的执行,阻塞和继续执行,可以使用System.Threading.ManualResetEvent类的 WaitOne()、Set()、Reset()方法。