Du hast FreeOnTerminate=True und
Delphi-Quellcode:
procedure TThPing.Execute;
begin
...
finally
FPing.Free;
DoThreadEnded;
end;
end;
Der Inhalt von DoThreadEnded wird also nahezu immer erst nach Ende des Threads und nach dessen Freigabe ausgeführt.
Grund: siehe mein letzter Post.