以下是部分代码:有两个文本框textboxX1和textboxX2,通过一线程不断监测textboxX1的text值,如不为空,就赋值给textboxX2,当线程开始后,手动不断去改textboxX1的值,但是达不到想要的效果,线程好像不起作用。只有点一下按钮就赋一次值,然后就不动了。       Thread th;
        private void button1_Click(object sender, EventArgs e)
        {
            th = new Thread(new ThreadStart(thStart));
            th.Start();
        }
        private void thStart()
        {
            if(this.textBoxX1 .Text !="")
            {
                this.textBoxX2.Text =this.textBoxX1 .Text .ToString ();
            }
            Thread.Sleep(1000);
        }        private void button2_Click(object sender, EventArgs e)
        {
            th.Abort();
         }

解决方案 »

  1.   

    你这线程就这些代码,一次运行完了就结束了,当然只起一次作用了
    你得将线程(thStart)里的代码放在一个循环里吧
    其实用定时器也能实现
      

  2.   

    要想循环
    while(true)
    {}
    线程放里面
      

  3.   

    首先这里没必要用线程,用TextChanged事件就可以了。其次线程不会自动循环运行
      

  4.   

    我知道可能用textchanged来做,只是练习线程,想让线程中,不断的监测控件的值的改变。我再试一下定时器
      

  5.   

    你干嘛不在textbox1的  textchanged事件里面处理呢如果text1改了  赋值给text2
      

  6.   

    线程启动后,线程池,会对所管理的线程队列轮循处理,
    可是如果你线程里面的程序执行完毕后,线程还没结束,那么CPU不会给他分配轮循执行时间的.程序处于睡眠状态.
    只有那些现成代码还没执行完毕的线程,才会循环分配到时间的(根据线程优先级).
    如果你想达到你的结果那样,while (true) 把你的线程程序包括进去. 最好把你的那个sleep (1000) 去掉.就可以了.
     
      

  7.   

    定时器 ,是固定时间执行那东西. 可以使用,system.Timers.Timer ,System.Windows.Timer  ,System.Threading.Timer  自己研究下,看下区别. 现在好多Thread 都不建议使用. 另外.invoke  begininvoke backgroundworker 都是不错的选择.吗的老婆怒了,继续哄之去.
      

  8.   

    线程启动后不是循环运行的,只运行一次就结束了。你要是想实现所说的功能,就把那个线程扔到timer或者while里去。
      

  9.   

    你这个不要用线程,用个timer控件就可以了,定时更新一下. 当然,如果用线程,再用timer也可以,那更复杂了