我可以在表单应用程序中查询while循环中的用户交互事件吗?

时间:2012-12-29 10:17:30

标签: c++ winforms user-interface c++-cli while-loop

在我的Windows窗体应用程序中,我有一个while循环,它不断轮询操纵杆设备的值,并不断用这些值更新GUI,然后刷新GUI。但是,只要我处于while循环中,UI就无法响应任何交互。

有没有办法在我的while循环中查询任何 GUI事件或按钮点击或按键等按钮?

如果某些事件或交互发生在哪里,我希望能够退出循环。我至少希望关闭并最小化按钮才能工作。

因为我只需要每秒20次轮询操纵杆并更新GUI,所以大部分循环时间只是睡眠时间。但我希望在此期间等待事件和互动。

2 个答案:

答案 0 :(得分:0)

您使用的是游戏手柄吗?如果是这样,你如何从中获得输入?

使用正常的Windows输入(鼠标和键盘),您将调用被重写的OnXxx方法(或调用相应的事件)。

显然,在不停止UI的情况下执行阻塞或长时间运行操作的常用方法是在单独的线程中运行操作。但是,它实际上取决于您从设备获取输入的方式。

答案 1 :(得分:0)

我比预期更简单地解决了这个问题。基本上它似乎是一个GUI应用程序中的while循环是一个坏主意。尝试从单独的线程使用while循环更新GUI将不起作用或者只是糟糕的编程习惯。

我没有使用while循环来连续无限次地调用函数,而是使用一个定时器来触发一个每隔50ms轮询一次操纵杆的函数。这意味着其余的时间GUI可以自由更新自己。我不需要强制它刷新或查询任何用户交互。因为这些功能只能非常短暂地运行,所以GUI有足够的时间来呼吸,不会错过任何交互或事件。

总结一下,定时器驱动的函数调用可以替代while循环,并且可以避免GUI应用程序中的多线程噩梦。