Jupp, Perform ist halt ein "SendMessage"
Viele nehmen gern einen kurzen Timer.
Ansonsten nehme ich für sowas immer öfters ein ForceQueue, damit ich den anderen Code gleich vor Ort hab. (also dort, wo ich ihn eigentlich ausführen wollte)
Delphi-Quellcode:
TThread.ForceQueue(nil, procedure
begin
...
end);
Vorteil ist auch, dass Dieses ebenfalls in anderen Platformen geht, da die Message-Queue (PostMessage) ja ein Windows-Ding ist.
Bei Forms, die sich selbst freigeben sollen, kann man auch ein .Close mit caFree im OnClose nutzen (statt einem .Free).
Du könntest auch ein
Abort;
nach deinem Free (vorm Ende der Methode) versuchen.