Es gibt im Job eine Property 'Synchronized'. Die steuert, ob der Job im Kontext des Hauptthreads ausgeführt wird oder nicht. Setze die im Konstruktor des Thread mal auf True und versuch dann, ob alles funktioniert.
Wenn das klappt, kannst Du anfangen, die Dinge, die was mit der
VCL zu tun haben, in separate Job-Methoden auszulagern, und die (bei Sychnronized = FALSE) direkt mit Synchronize aufzurufen. Dann wird der Job im Hintergrund ausgeführt, aber das Update der sichtbaren Komponenten im Hauptthread.