Worker线程不能修改UI线程的状态(比如文本框里面的内容)。
解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文本框。
具体代码如下:
void ThreadEntry()
{
int i = ;
string name = Thread.CurrentThread.Name;
while (i > )
{
Thread.Sleep();
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()方法。