Ach ja, und wenn Du es umbaust, dass verwende eventuell ein TThread, nicht TTask..
Ein TThread hat ein 'OnTerminate' Event, welches bereits mit dem MainThread synchronisiert aufgerufen wird.
Das ist aber eine recht rückschrittliche Empfehlung. Es ist überhaupt kein Problem, in einem Task eine beliebige Aktion im Mainthread auszuführen - nicht nur beim Beenden:
Delphi-Quellcode:
TTask.Run(
procedure
begin
DirList;
TThread.Queue(nil,
procedure
begin
// tue was, nachdem DirList beendet wurde
end;
end);
Das löst aber natürlich nicht das Problem mit den Zugriffen auf
VCL-Objekte innerhalb DirList. Da steckt vermutlich noch der größte Aufwand bevor das threadsicher wird.