Como posso me livrar do atraso de repetição de caracteres em c #?

http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - Existe uma opção no Windows para definir o atraso de repetição. Significa o atraso entre o primeiro pressionamento de tecla e os outros se continuar pressionando a tecla. Estou criando uma espécie de jogo e preciso me livrar desse "recurso".

Até agora consegui encontrar este método:



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

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

Mas o método IsKeyPushedDown descobre se a tecla foi pressionada NO MOMENTO de chamar a função - então eu preciso de um loop para testar se a chave está inativa. O problema é que ainda não pega todas as teclas digitadas - eu tenho um loop muito lento, eu acho.

A segunda escolha é substituir o 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);
            }

}

Isso funciona muito bem, mas é afetado com o atraso de repetição e, portanto, o movimento do meu monstro no meu jogo é como:

Existe solução para meu problema? obrigado

EDIT: eu resolvi o problema combinando os dois procedimentos. Mas é uma solução muito feia. Eu ainda espero que haja uma solução melhor.

questionAnswers(1)

yourAnswerToTheQuestion