C# 制作表格';它的按键速度更快

C# 制作表格';它的按键速度更快,c#,C#,我有一个使用键控的表单。KeyDown事件很长,占用了近30k行,这就带来了一个问题。在调试时,我第一次按下一个键时,表单会冻结一两分钟,直到我认为它读取了KeyDown事件的所有条件。然后它会完美地工作,直到您关闭该窗体并再次加载它 注:这仅在按键事件、KeUp事件正常工作时发生 我想写代码,但正如我所说的,它有30K行,充满了条件,所以我的问题是,有没有办法使按键事件更快或不冻结,除了减少行数或条件外?这需要心理调试,你问的是最相关的 您实际上没有订阅Form.KeyDown事件。您订阅了另

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

注:这仅在按键事件、KeUp事件正常工作时发生


我想写代码,但正如我所说的,它有30K行,充满了条件,所以我的问题是,有没有办法使按键事件更快或不冻结,除了减少行数或条件外?

这需要心理调试,你问的是最相关的

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

是的,这与你描述的行为不谋而合。操作系统调用了钩子的回调函数,该函数触发了KeyDown事件。您在其上设置了断点,现在回调无法完成。Windows暂时处于紧张状态,在回调完成之前无法处理下一次击键

它不会永远等待,几秒钟后,它会判断您的程序行为不正常,并且会不客气地破坏钩子。当然很重要。您注意到了这个延迟


如果你想尝试调试这个怪物的话,你必须用不同的方法来做。您需要设置另一台计算机并使用连接到它。这并不是一个黄金解决方案,你仍然可以摧毁钩子,但至少你可以更快地重新控制自己的机器。使用只模拟回调事件的单元测试是非常非常明智的。

这完全取决于您的代码在做什么。然而,30K行的方法从来都不是一个好主意。在需要30000行代码的按键事件中,你试图做什么?@SujaySarma使用不同的键盘布局,当你按一个设计的键时,它会发出声音。@SLaks是绝对正确的:问题是你的30千行代码,而不是按键事件本身。修正你的代码。Rgds,你能把这个方法上传到什么地方吗?为了研究目的?