尝试了th.suspend和th.resume但不能达到预期的效果。我希望的是线程自动运行一步,然后就无限的挂起,直到点击button按钮之后线程再运行一步。

解决方案 »

  1.   

    有个笨的办法就是:
    运行一步
    开启一个定时器周期长一点..
    然后线程sleep;定时器每到周期又继续让sleep 睡眠..按下BUTTON的话解除定时器并且让线程醒来
      

  2.   

    Suspend,Resume都是过期方法了。用标志位代替吧。private bool _stop = false;
    private bool _suspend = false;线程:
    while(!_stop)
    {
       if (_suspend)
       {
           Thread.Sleep(100);
       }
       else
       {
           // do some work...
       }
    }
      

  3.   

    如果是while循环的这种线程
    while(true)
    {
    循环体中间用全局的System.Threading.ManualResetEvent的waitOne方法
    }按钮控制ManualResetEvent的中止状态和非中止状态
    如果不是while循环 就在线程执行代码中你认为可以停下来的地方 多放几个waitOne方法
      

  4.   


    6楼正解...不过ManualResetEvent我还不是很会用,随便写了一个楼主看看using System;
    using System.Windows.Forms;
    using System.Threading;namespace test
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();            ThreadPool.QueueUserWorkItem(aaaa);
            }        AutoResetEvent are = new AutoResetEvent(true);        int i = 0;        void aaaa(object o)
            {
                WaitCallback d = delegate(object oo) { this.label1.Text = oo.ToString(); };            while (true)
                {
                    this.Invoke(d, ++i);                if (b)
                    {
                        are.WaitOne();
                    }
                    else
                    {
                        Thread.Sleep(500);
                    }
                }
            }        bool b = false;        private void button1_Click(object sender, EventArgs e)
            {
                if (b=!b)
                {
                    are.Reset();
                }
                else
                {
                    are.Set();
                }
            }
        }
    }
      

  5.   

    按下BUTTON的话怎样让线程醒来??
      

  6.   

    定义个全局变量保存所示ID就行了...
    GetThreadId() 获取线程ID 
    然后在通过OpenThread(); 通过ID获取该线程.
    最后调用Resume()唤醒;不过今天才看到信号量这张..觉得你自己创建个类..
    把信号量和所创立的线程封装到一起.应该更简单点..