haizzh

博客园 首页 新随笔 联系 订阅 管理
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()方法。

 



posted on 2017-06-06 16:27  haizzh  阅读(177)  评论(0编辑  收藏  举报