我有一个带有keydown事件的项目,但每次按键时,我都会点击该键,如果我停止点击它,它将等待半秒,并快速开始向该键发送垃圾邮件。我需要它在没有冷却的情况下发送垃圾邮件,我该怎么办?
发布于 2012-02-12 18:55:25
这称为键盘重复延迟,它是一个系统范围的属性,可以在控制面板的键盘部分进行设置。或者,您可以通过代码设置它,使用SystemParametersInfo Win32 API函数,设置SPI_SETKEYBOARDDELAY标志。
要从C#调用它,您可能需要定义一个P/Invoke签名,但幸运的是,PInvoke.net上的某个人已经为我们提供了done this。
不要忘记您正在设置一个系统范围的设置!这可能需要管理员权限,而且在任何情况下,您都应该表现得很好,并在完成后将其恢复为原始设置。
发布于 2012-02-12 19:06:11
而不是更改系统范围的设置,仍然有250ms的延迟,您可以观看同一个键的keydown和keyup事件(不要忘记,用户可以一次按多个键,然后以不同的顺序释放它们)。在keydown上以所需的频率启动计时器,并在keyup上停止计时器,并将之前的keydown处理程序设置为计时器处理程序。
发布于 2012-02-12 19:08:44
尝试使用反应式扩展,并使用与时间相关的运算符之一,如Sample或Interval,以实现此处所需的功能。
http://msdn.microsoft.com/en-us/data/gg577609
作为示例(仅作为指南,键入时不带VS)
Observable.FromEventPattern<KeyPressEventArgs>(this, "KeyPress").Sample(500).....https://stackoverflow.com/questions/9248143
复制相似问题