Ich denke der Grund ist deine Endlosschleife im DoRun:
Delphi-Quellcode:
While Run do
Begin
[...]
End;
// stop program loop
Run:=False;
Run wird innerhalb der While-Schleife nirgends auf False gesetzt soweit ich das sehe und entsprechend wird die Schleife nie beendet.