Application.ProcessMessages kann zu rekursiven Aufrufen von Clickereignissen können, da Application.ProcessMessages den aktuellen Code unterbricht und Ereignisse neu verarbeitet.
Hast Du nur ein Form und eine Schleife mit 10000 Durchläufen, darin ein Application.ProcessMessages, kann der Nutzer den Button drücken, obwohl die Schleife noch nicht durchlaufen wurde. Die Schleife wird dann "Rekursiv" neu aufgerufen und idR hat man
Access Violations.
Es ist eigentlich auch nicht möglich alles in threads zu packen, da man zB auch externe Komponenten hat, welche nicht Threadsave sind, welche aber wiederrum ein "OnProgress" anbieten.
Alle Forms Disablen und Enablen funktioniert auch nicht, da dann zB Timer feuern und Modale Fenster zerschossen werden.