快速制作表格的KeyDown

时间:2014-06-29 14:20:36

标签: c#

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

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

我会把代码放进去,但正如我所说的30K行充满条件,所以我的问题是,有没有办法使KeyDown事件更快或不冻结,除了减少线条或条件的数量?

1 个答案:

答案 0 :(得分:2)

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

您实际上并没有订阅Form.KeyDown事件。您订阅了另一个 KeyDown事件,由使用低级键盘挂钩的a library提供。底层的winapi调用是SetWindowsHookEx()。因此,您可以在表单没有焦点时检测击键。

是的,那就像你描述的那样行为错误完全。操作系统调用了hook的回调函数,该函数触发了KeyDown事件。你在它上面设置一个断点,现在回调无法完成。 Windows会在一段时间内变形紧张,在回调完成之前无法处理 next 击键。

它不会永远等待,几秒钟后它就会判断你的程序行为不端而且它毫不客气地破坏了钩子。当然很重要。你注意到了这种延迟。

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