Как я могу избавиться от задержки повторения символов в C #?

http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - В Windows есть опция для настройки задержки повтора. Это означает задержку между первым нажатием клавиши и другими, если вы продолжаете нажимать клавишу. Я создаю какую-то игру, и мне нужно избавиться от этой "функции".

Пока мне удалось найти этот метод:



[DllImport("user32.dll")]
static extern ushort GetAsyncKeyState(int vKey);

public static bool IsKeyPushedDown(Keys keyData)
{
   return 0 != (GetAsyncKeyState((int)keyData) & 0x8000);
}

Но метод IsKeyPressedDown выясняет, нажата ли клавиша в момент вызова функции, поэтому мне нужен цикл, чтобы проверить, нажата ли клавиша. Проблема в том, что он все еще не улавливает все нажатия клавиш - я думаю, что у меня слишком медленный цикл.

Второй вариант - переопределение ProcessCmdKey:


protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
  // processing keys
            if (keyData == Keys.Left || keyData == Keys.Right || keyData == Keys.Up || keyData == Keys.Down)
            {
                return true;
            }
            else
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }

}

это работает действительно хорошо, но на это влияет задержка повторения, и поэтому движение моего монстра в моей игре выглядит следующим образом:

Есть ли решение для моей проблемы? Спасибо

РЕДАКТИРОВАТЬ: я решил проблему, объединив обе процедуры. Но это очень уродливое решение. Я все еще надеюсь, что есть лучшее решение.

Ответы на вопрос(1)

Ваш ответ на вопрос