Du rufst Application.ProcessMessages im Threadkontext auf und greifst damit ganz tief in die Messagebehandlung der
VCL ein. Das kann nicht klappen.
In einer länger laufenden Methode, die im Hauptthread läuft, wird das verwendet, damit die
GUI noch reagiert, indem dort die Paint-, Maus- und Tastaturmessages abgearbeitet werden. (Besser ist natürlich, das zu vermeiden.)
In einem Thread ist das nicht nötig (und auch nicht möglich). Wenn du warten möchtest, rufst du einfach Sleep auf. Da der Thread separat läuft, blockierst du damit auch nicht die
GUI. Oder du wartest auf ein Event eine definierte Zeit.