Wenn FreeOnTerminate gesetzt ist, geht WaitFor schlicht nicht.
Folgendes Szenario:
Delphi-Quellcode:
// Im MainThread:
ThreadInstance.Terminate;
// -> Threadwechsel
// ThreadInstance terminiert und verschwindet aus dem Speicher
// -> Threadwechsel zum MainThread
ThreadInstance.WaitFor;
// ThreadInstance hat noch einen Wert, ist aber ungültig -> Exception
Also: Wenn du unbedingt auf den Thread warten musst, dann geht das nur wenn du ihn hinterher selbst freigibst.