Dass es teilweise funktioniert hatte, war praktisch nur ein Zufall.
Wenn es nur Aynchron, aber ebenfalls im Hauptthread laufen soll, dann nimm einfach TThread.Queue .
Das ist wie Synchronize, nur das Synchronize direkt ausgeführt und bis nach der Ausführung gewartet wird, und während Queue nur den Aufruf abschickt und direkt weitermacht.
ABER, aus den Hauptthread heraus arbeitet Queue wie Syncronize und daher wurde nun endlich TThread.ForceQueue eingebaut, was richtig funktioniert.
http://www.delphipraxis.net/179193-t...der-queue.html
TThread.Synchronize
TThread.Queue
TThread.ForceQueue
Delphi-Quellcode:
TThread.ForceQueue(nil, procedure
begin
ShowMessage('During TTask');
end);
Wie gesagt, so wird alles im Hauptthread ausgeführt, nur eben nicht sofort, sondern wenn er das nächste Mal Zeit hat.