Простой способ справиться с этим - установить буфер времени вокруг события OnKeyDown. Установите таймер, который определяет, передается ли управление вторичному обработчику событий. Если время таймера истекло, то все в порядке, чтобы передать управление. Если таймер не истек, вы должны вернуться и оставить событие необработанным. Запустите таймер прямо перед передачей управления вашему вторичному обработчику событий.
void KeyDownHandler(...)
{
// ...
if (TimeLeft() <= 0)
{
StartTimer();
handleKeyDown();
}
}
Таймер лучше, чем подсчет повторяющихся событий, потому что вы не можете предполагать, что в данной системе будет установлена та же частота повторения, что и у вас.
Я согласен со Стюартом, что опрос состояния ключа может работать лучше. Это зависит от того, чего вы пытаетесь достичь.
Также обратите внимание, что этот тип поведения может сильно раздражать вашего пользователя - зачем вам игнорировать дубликаты?