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

时间:2011-01-17 17:40:44

标签: c# infinite-loop

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

bool stop = false;
while (!stop){    
...
// code to update a label that displays the number of times the loop executed.
...
}

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

这是一回事。 令我困惑的另一件事是为什么标签没有显示循环次数。这就像程序只是循环而无所事事。

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

1 个答案:

答案 0 :(得分:2)

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

.Net Framework的Application类运行一个消息循环,询问Windows下一条消息,然后根据需要处理该消息。

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

您应该用Timer组件替换您的循环 将循环体移动到Tick处理程序中,并将Interval设置为2050