¿Cómo puedo deshacerme del retraso en la repetición de caracteres en C #?

http://www.microsoft.com/windowsxp/using/accessibility/characterrepeatrate.mspx - Hay una opción en Windows para configurar el retraso de repetición. Significa la demora entre la primera pulsación de tecla y las otras si uno sigue presionando la tecla. Estoy creando una especie de juego y necesito deshacerme de esta "característica".

Hasta ahora he logrado 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);
}

Pero el método IsKeyPushedDown descubre si la tecla se presiona AL MOMENTO de llamar a la función, por lo que necesito un bucle para probar si la tecla está abajo. El problema es que todavía no captura todas las pulsaciones de teclado, supongo que tengo un bucle demasiado lento.

La segunda opción es la anulación de 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);
            }

}

esto funciona realmente bien, pero se ve afectado por el retraso de la repetición y, por lo tanto, el movimiento de mi monstruo en mi juego es como:

¿Hay una solución para mi problema? Gracias

EDITAR: resolví el problema mediante la combinación de ambos procedimientos. Pero es una solución muy fea. Todavía espero que haya una mejor solución.

Respuestas a la pregunta(1)

Su respuesta a la pregunta