Winforms应用程序在运行此代码时崩溃

时间:2015-05-28 09:34:20

标签: c# wpf winforms

当我执行以下代码时,应用程序挂起。我在这里做错了吗?

注意:即使我没有thread.sleep,应用程序仍然崩溃。 事实上我已经添加了阻止它崩溃。

    private void start_Click(object sender, EventArgs e)
    {
        boolValue = true;
        while (boolValue)
        {
            counter++; //Class Variable =0 by default
            Thread.Sleep(1000);
            lbl.Text = counter.ToString();               
        }
    }

/////////////////////////////////////////////// ///////////////////////////

    private void start_Click(object sender, EventArgs e)
    {
        boolValue = true;
        while (boolValue)
        {
            counter++; //Class Variable =0 by default

            lbl.Text = counter.ToString();               
        }
    }

3 个答案:

答案 0 :(得分:2)

它永远不会改变boolValue值。代码将处于无限循环中。如果您想显示计数器的值,可以使用类Timer

private Timer myTimer = new Timer();

private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)     
{       
  lbl.Text = counter.ToString();  
  counter++;
}

private void start_Click(object sender, EventArgs e)
{
   myTimer.Tick += new EventHandler(TimerEventProcessor);      
   myTimer.Interval = 1000;
   myTimer.Start();
}
}

答案 1 :(得分:0)

您必须在循环中的某处设置boolValue = false。它的无限循环。

例如:

private void start_Click(object sender, EventArgs e)
{
    boolValue = true;
    while (boolValue)
    {
        counter++; //Class Variable =0 by default
        Thread.Sleep(1000);
        lbl.Text = counter.ToString();

        if (counter == int.MaxValue)
        {
           boolValue = false;
        }
    }
}

更好的解决方案是使用Timer Component而不是while()!

答案 2 :(得分:0)

如果您想要显示计数器,请参阅@ Spark的答案。 否则在循环中添加以下命令,你必须考虑无限循环:

Application.DoEvents();