当我执行以下代码时,应用程序挂起。我在这里做错了吗?
注意:即使我没有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();
}
}
答案 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();