使窗体's KeyDown更快

本文关键字:KeyDown 更快 窗体 | 更新日期: 2023-09-27 18:10:46

我有一个使用KeyDown的表单。KeyDown事件很长,占用了近3万行,这带来了一个问题。当我在调试时第一次按下一个键时,表单冻结了一两分钟,直到我认为读取了KeyDown事件的所有条件。然后,它可以完美地工作,直到您关闭该表单并再次加载它。

注意:这只发生在KeyDown事件,KeUp事件正常工作时。

我会把代码,但我说它的30K行充满条件,所以我的问题是,有没有一种方法使KeyDown事件更快或不冻结像那样,除了减少行或条件的数量?

使窗体's KeyDown更快

这需要通灵调试,你问的这个问题是最相关的。

你实际上并没有订阅表单。KeyDown事件。您订阅了另一个 KeyDown事件,该事件由使用低级键盘钩子的库提供。底层的winapi调用是SetWindowsHookEx()。因此,当窗体没有焦点时,您可以检测击键。

是的,这不正行为完全像你描述的。操作系统调用钩子的回调函数触发KeyDown事件。您在它上设置了一个断点,现在回调无法完成。Windows会紧张一段时间,它不能处理下一个按键,直到回调完成。

它不会永远等待,在几秒钟后,它决定你的程序行为不正常,它会毫不客气地销毁钩子。当然这很重要。您注意到这个延迟了。

如果你想有机会调试这个怪物,你将不得不做不同的事情。您需要设置另一台机器,并使用远程调试器连接到它。这不是一个黄金的解决方案,你仍然会破坏钩子,但至少你可以更快地重新控制自己的机器。使用模拟回调事件的单元测试将是非常非常明智的。