Ein weiteres Problom könnte sein, dass der Timer bereits wieder ausgelöst wird, während die Timerroutine noch nicht vollständig abgearbeitet ist.
Ich glaube, das ist technisch nicht möglich, da weitere Timer-Events erst beim nächsten Abarbeiten der Message Queue auftauchen würden. Es kann also schon sein, dass nach Abarbeiten des Timer-Events bereits ein weiterer Event ansteht, aber eben erst
nach dem Beenden des Events. Die Timer-Messages werden ja nur nach Anfrage erzeugt. Solange also niemand (auch nicht indirekt) innerhalb des Event-Codes ein PeekMessages aufruft, sollte auch keine neue Timer-Message in der Queue landen.
Das ist ja auch einer der Gründe, warum man kein Application.ProcessMessages aufrufen soll, denn dann könnte tatsächlich der Eventhandler rekursiv aufgerufen werden. Dann nutzt aber das Disablen des Timers auch nicht wirklich viel, da das ein Re-Entering nicht 100%ifg verhindern kann - es könnten ja schon weitere Timer-Messges in der Queue sein. Das Disable/Enable erzeugt aber unnötig weitere KillTimer/SetTimer Aufrufe und belastet das System eigentlich mehr als es hilft.