Also für mich hört sich das nach einem Zugriff auf ein bereits freigegebenes Objekt an. Der Fehler sitzt vermutlich ausserhalb des Threads. Beim Tab-Wechsel wird ja wahrscheinlich FFileChanged.Terminate aufgerufen. Danach ist der Inhalt von FFileChanged ungültig und darf nicht mehr angefasst werden, da sich der Thread ja selbst freigibt. Am besten also vielleicht eine solche Konstruktion benutzen:
Delphi-Quellcode:
FFileChanged.Terminate;
FFileChanged := nil;
Bzw.
Delphi-Quellcode:
//Alten Thread beenden
FFileChanged.Terminate;
//Einen neuen Thread starten
FFileChanged := TThreadFileChanged.Create(AnotherWatchFile);
Vielleicht einfach mal den kompletten Quelltext des TThreadFileChanged posten?