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

本文关键字:代码 崩溃 运行 应用程序 Winforms | 更新日期: 2023-09-27 17:51:01

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

注意:即使我没有线程。睡觉,应用程序还在崩溃。事实上,我已经添加了防止它崩溃。

    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();               
        }
    }

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

不会改变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();
}
}

必须在循环的某个地方设置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;
        }
    }
}

一个更好的解决方案是使用定时器组件而不是while()!

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

Application.DoEvents();