Wäre es nicht geschickter, den aktuellen Progress-Wert einfach in deinem Thread zu setzen und im Hauptthread entweder über OnIdle, ActionUpdate oder einen Timer-Event zu aktualisieren. Gegebenfalls musst du die Zugriffe auf den Progress-Wert noch durch einen TMultiReadExclusiveWriteSynchronizer absichern, was aber mit einer passenden Getter/Setter-Kombination transparent zu realisieren wäre.
Der Vorteil bei diesem Verfahren ist, daß der Thread von der Synchronisierung entlastet wird und der Hauptthread nur dann was aktualisiert, wenn er dazu auch Zeit hat.
Abgesehen davon ist das
IMHO auch viel übersichtlicher.