繁体   English   中英

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

[英]Can I query for user interaction events within a while loop, in a form application?

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

在while循环中,是否可以查询任何 GUI事件或交互(如按钮单击或按键)?

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

因为我只需要轮询操纵杆并每秒更新GUI 20次,所以大多数循环时间就是睡眠时间。 但是我想在这段时间里等待事件和互动。

您在使用游戏控制器吗? 如果是这样,您如何从中获取输入?

使用普通的Windows输入(鼠标和键盘),您将调用覆盖的OnXxx方法(或调用相应的事件)。

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

我已经比我预期的要简单得多了。 基本上,在GUI应用程序中循环循环似乎不是一个好主意。 尝试使用while循环从单独的线程更新GUI将不起作用,或者这只是不好的编程习惯。

我没有使用while循环在不确定的时间内连续调用一个函数,而是使用了一个计时器,该计时器触发一个每隔50ms轮询一次操纵杆的函数。 这意味着其余时间GUI可以自由更新自身。 我不需要强迫它刷新或查询任何用户交互。 因为这些功能仅运行很短,所以GUI有很多时间可以呼吸,因此不会错过任何交互或事件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM