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