C# 为什么无限循环使程序无响应?

C# 为什么无限循环使程序无响应?,c#,infinite-loop,C#,Infinite Loop,在windows桌面应用程序(windows窗体)中,我在(c#)中创建了一个while循环: 单击按钮时,“停止”为真,循环将停止。 但是,我没有机会在应用程序运行后单击该按钮,因为它会变得无响应 这是一件事。 另一件让我更困惑的事情是为什么标签上没有显示循环的数量。这就像程序只是循环,什么也不做 如果您想知道,我正在尝试为游戏循环编写代码 Windows应用程序通过响应Windows消息来工作。 所有WinForms事件实际上都来自Windows消息,如WM_PAINT或WM_MOSUEMO

在windows桌面应用程序(windows窗体)中,我在(c#)中创建了一个while循环:

单击按钮时,“停止”为真,循环将停止。 但是,我没有机会在应用程序运行后单击该按钮,因为它会变得无响应

这是一件事。 另一件让我更困惑的事情是为什么标签上没有显示循环的数量。这就像程序只是循环,什么也不做


如果您想知道,我正在尝试为游戏循环编写代码

Windows应用程序通过响应Windows消息来工作。
所有WinForms事件实际上都来自Windows消息,如WM_PAINT或WM_MOSUEMOVE

Net Framework的
应用程序
类运行一个消息循环,向Windows请求下一条消息,然后根据需要处理该消息

例如,如果用户单击按钮,Windows会向您的程序发送WM_CLICK消息。Net的消息循环将其转换为
单击
事件,并运行您注册的任何事件处理程序。
代码运行时,应用程序正忙于响应其收到的任何消息,并且无法响应消息。
因此,它似乎冻结了

您应该使用
计时器
组件替换循环。

将循环体移动到
勾选
处理程序中,并将
间隔
设置为
20
50

以使其工作:将无限循环放在单独的线程中。@Time:使用(WinForms)计时器。@SLaks-duly。这是一种很愚蠢的方式。现在我比以前更恨C#…@时代:为什么?还有什么其他选择是有意义的?谢谢。WPF也是如此,所以我想这是同样的原因。但是为什么label/Textblock没有用循环数更新呢。更新代码在循环中,它是:textBlock1.Text=(numofframes/timePassed).ToString();其中numoframes是整数,timePassed是double?????我用“FramesPerSecond”字符串文字初始化了textBlock的Text属性,循环开始后它不会被覆盖?
bool stop = false;
while (!stop){    
...
// code to update a label that displays the number of times the loop executed.
...
}