Der Fehler ('Das
Handle ist ungültig') tritt bei Threads bekanntermaßen dann auf, wenn die Classes-
Unit finalisiert wurde und DANACH noch Threads freigegeben werden. TThread.Destroy verwenden Objekte aus der Classes-
Unit.
Aber das scheint bei Dir nicht der Fall zu sein. step doch einfach mal den Thread durch (NICHT das Synchronize, das macht keinen Spass).
Ich meine, das Dein Code sauber ist, vor allen Dingen mit der manuellen Freigabe.
Erstelle Dir ein kleines Projekt mit zwei Buttons.
Button1 = Thread-Instantiierung und -Start
Button2 = Thread-Ende und Destroy.
Klappt das dann auch?