Du musst wahrscheinlich schon den Aufruf asynchron machen.
Ich arbeite z.B. oft mit TThread.ForceQueue, geht an jeder Stelle und schadet nicht.
Kann aber blockierende Tasks schön entkoppeln.
Delphi-Quellcode:
ShowIndicator;
TThread.ForceQueue(
nil,
procedure
begin
DoBlockingStuff;
end );
Ach ja, und ApplicationProcessMessages würde ich möglichst Vermeiden, das richtet mehr Schaden an als es nutzt.