C# Winforms应用程序在运行此代码时崩溃
当我执行以下代码时,应用程序挂起。我做错什么了吗 注意:即使我没有thread.sleep,应用程序仍然会崩溃。 事实上,我已经添加了阻止它崩溃C# Winforms应用程序在运行此代码时崩溃,c#,wpf,winforms,C#,Wpf,Winforms,当我执行以下代码时,应用程序挂起。我做错什么了吗 注意:即使我没有thread.sleep,应用程序仍然会崩溃。 事实上,我已经添加了阻止它崩溃 private void start_Click(object sender, EventArgs e) { boolValue = true; while (boolValue) { counter++; //Class Variable =0 by defaul
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();
}
}
您必须在循环中的某个地方将布尔值设置为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;
}
}
}
更好的解决方案是使用计时器组件而不是while() 它永远不会改变
布尔值
值。代码将处于无休止的循环中。如果要显示计数器的值,可以使用ClassTimer
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();
}
}
如果您想显示计数器,请参阅@Spark的答案。 否则,在循环中添加以下命令,您必须考虑无限循环:
Application.DoEvents();
你告诉它永远睡觉。你期望什么?如果你想有一个计数器显示,使用定时器机制。看到我的答案!你正在建立一个无止境的循环。在循环中的某个地方,您必须将布尔值更改为false。否则循环在任何时候都不能停止。我希望循环是无限的,并在标签中显示更新的计数器值。@Nuclear Core是,但您必须定义一个结束。循环无止境。因此,您的系统不能做任何其他工作,因为它必须运行您的循环。这就是您的系统无法响应的原因。感谢@Spark的回复。但是你能解释一下为什么我的应用程序在当前代码下崩溃吗