我有一个事件是这样,我要循环一组数字,并且显示他的值
private void button1_Click(object sender, System.EventArgs e)
{
for (int i = 0 ; i < 100000; i++){

this.label1.Text = i.ToString();
Application.DoEvents();
}
}
然后,我有另外一个事件就是让上一个事件中的计数器马上停下来,并且等于一个特定的值,
private void button2_Click(object sender, System.EventArgs e)
{
this.label1.Text = "2";
}
可是,第二个事件必须得等地一个事件停止后才能生效,也就是我才能看到label1。text=2,怎么解决这个问题?

解决方案 »

  1.   

    this.button1.Click -= new System.EventHandler(this.button1_Click_1);
      

  2.   

    bool stop;
    加一个判断在第一个事件的循环里, for (int i = 0 ; i < 100000; i++){

                                     if (stop) retrun; this.label1.Text = i.ToString();
    Application.DoEvents();
    }
    在第二个事件里写 private void button2_Click(object sender, System.EventArgs e)
    {
                               stop=true;
    this.label1.Text = "2"; }
      

  3.   

    Thread thread;
      delegate void del(int x);    
     private void FormStart()
            {
                for (int i = 0; i <= 10000; i++)
                {
                    object obj = i;
                    Invoke(new del(LabelShow), i);
                }        }
            private void LabelShow(int i)
            {
                label1.Text = i.ToString();
            }        private void button1_Click(object sender, EventArgs e)
            {
                thread = new Thread(new ThreadStart(FormStart));
                thread.Start();
                //Application.Exit();
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (thread != null)
                {
                    if (thread.ThreadState == ThreadState.Running)
                    {
                        thread.Abort();
                    }
                    label2.Text = "2";
                    thread = null;
                }        }
        }