【发布时间】:2023-03-22 15:37:02
【问题描述】:
我的 WinForms 应用程序有一个按钮。此按钮具有加速键(例如 Alt+L)。当按下按钮时,我处理 Click 事件并禁用 UI 以防止进一步的按钮点击,直到处理完成。但是,当使用键盘按下加速键时,这些击键将排队并在 UI 再次启用时立即得到处理。我不想要这个。我的问题是如何清除/刷新键盘缓冲区?
如果我使用 KeyPress 或 KeyDown 吃掉那些我不知道什么时候收到的字符。我只想抑制在我仍在处理第一个 Click 事件时到达的旧/陈旧消息。
【问题讨论】:
-
您禁用按钮并且击键设法推动它?在重新启用按钮之前尝试
Application.DoEvents。 -
听起来你正在做的工作可能希望在它自己的线程上运行以释放用户界面线程并保持消息泵运行。 Application.DoEvents 可能会有所帮助。但另一个线程似乎也是个好主意。
-
@madmik3:同意创建一个新线程。
Application.DoEvents有点像黑客。多线程是更优雅的解决方案。 @Jacob:但您首先需要确认 UI 阻塞确实是问题所在。从问题中不清楚您是否正确地做其他所有事情。 -
@Cody:也许 UI 被禁用的事实并不相关。我看到的是,如果用户键入的速度快于应用程序可以处理的速度,或者它无法处理事件,则击键将排队等待稍后处理。我不想要这个。
标签: winforms keyboard buffer flush