TThread.Queue ist eine Alternative: es blockiert den Worker-Thread nicht, sondern stellt den im Hauptthread auszuführenden Code in eine Warteschlange.
Zitat:
"Im Gegensatz zu Synchronize ist die Ausführung des aktuellen Threads zum Fortsetzen zulässig. Der Haupt-Thread verarbeitet alle Methoden aus der Warteschlange."