Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winforms应用程序在运行此代码时崩溃_C#_Wpf_Winforms - Fatal编程技术网

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

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

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

注意:即使我没有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();               
        }
    }

您必须在循环中的某个地方将布尔值设置为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()

它永远不会改变
布尔值
值。代码将处于无休止的循环中。如果要显示计数器的值,可以使用Class
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();
}
}

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

Application.DoEvents();

你告诉它永远睡觉。你期望什么?如果你想有一个计数器显示,使用定时器机制。看到我的答案!你正在建立一个无止境的循环。在循环中的某个地方,您必须将布尔值更改为false。否则循环在任何时候都不能停止。我希望循环是无限的,并在标签中显示更新的计数器值。@Nuclear Core是,但您必须定义一个结束。循环无止境。因此,您的系统不能做任何其他工作,因为它必须运行您的循环。这就是您的系统无法响应的原因。感谢@Spark的回复。但是你能解释一下为什么我的应用程序在当前代码下崩溃吗