Rispondo nonostante sia passato molto tempo solo per chiarire un aspetto tecnico:
L'evento 'KeyDown' viene eseguito finché il tasto è premuto e questo provoca l'esecuzione del codice associato tante volte quanto previsto dall'impostazione di velocità della tastiera (eventualmente ridotto in numero solo dalla complessità del suddetto codice).
Il comportamento è facilmente riscontrabile: se premi 'A' in Notepad e non ne esegui il rilascio, continui a scrivere lo stesso carattere.
Se programmi un counter associato ad ogni esecuzione del codice chiamato e ne mostri il valore in un controllo, vedrai che il valore continua a crescere fintanto che lo stesso codice viene eseguito e giunge al termine: significa che fino a quando il tasto resta premuto, potenzialmente puoi rieseguire il codice all'infinito anche se vedrai il risultato della sola ultima esecuzione.
L'evento 'KeyUp' viene eseguito solo una volta e cioé al rilascio del tasto.
Questo implica che, per sua natura, non darà luogo ai problemi di cui sopra.