一个全局变量两个button.bool go = true;//是否循环开关
//点击button1开始while循环
private void button1_Click(object sender, EventArgs e)
{
    while (go)
    {
        //to do anything
    }
}
//点击button2将开关置为false停止循环
private void button2_Click(object sender, EventArgs e)
{
    go = false;
}
就是点击了按钮1开始无限循环,希望点击按钮2可以将循环终止,上面的代码不可行,求教!

解决方案 »

  1.   

    试试
    while (true)
        {
            if(go)
            {
              //to do anything
             }
             else
             {break;}
        }
      

  2.   

    不是这个意思,要一个事件中开启无限循环不停做一件事情,比如模拟鼠标左键点击;在我想让他停的时候出发另一个事件来结束循环。
    按button1开始,按button2结束按button1开始,按button2结束按button1开始,按button2结束如此这样
      

  3.   

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                CheckForIllegalCrossThreadCalls = false;
            }        bool go = true;//是否循环开关
            Thread thread;
            private void button1_Click(object sender, EventArgs e)
            {
                //点击button1开始while循环
                thread = new Thread(new ThreadStart(function));
                thread.Start();
            }
            private void button2_Click(object sender, EventArgs e)
            {
                //点击button2将开关置为false停止循环
                thread.Abort();
            }        //定义方法
            void function()
            {
                while (go)
                {
                    //to do anything
                }
            }
        }
      

  4.   

    就用backgroundWorker组件,线程管理方便。private void button1_Click(object sender, EventArgs e)
    {
      go = true;
      backgroundWorker1.RunWorkerAsync();
    }
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    while (go)
    {
                ...
    }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        go = false;
    }
      

  5.   

    这个循环在当前的UI线程里完成,所以如果你让当前线程挂起或者等待,则UI将变成无响应状态。所以这个循环最好是放在一个独立的线程中完成,当需要UI线程工作的时候利用UI的Invoke将方法委托给UI线程完成。循环的停止有两种:
    1、跳出循环。跳出循环当下次再启动循环的时候需要记住上次跳出的位置,循环从上次跳出去的地方继续执行。
    2、使执行循环的线程停止下来,可以考虑使用AutoRestEvent或者ManualRestEvent。
      

  6.   

                while (go)
                {
                    //to do anything
                    if (go == false) { break; }
                }