Drei Fehler fallen mir spontan auf:
- Mit Execute rufst Du die Methode direkt auf, du musst Start aufrufen, um den Thread zu starten.
- Dann wird ein Problem auftreten, denn Du greifst vom Thread aus ohne Synchronisation auf die GUI zu. Stichworte: Synchronize, oder TCriticalSection, oder TMUltiReadExclusiveWriteSynchronizer ...
- btn1Click greif einfach auf das Thread-Objekt zu, obwohl es dank FreeOnTerminate evtl. gar nicht mehr existiert.