Entwickler-Ecke

LCL-Komponenten - Label-Caption vor GUI-Blockade setzen - zu langsam?


hydemarie - Di 07.01.20 00:05
Titel: Label-Caption vor GUI-Blockade setzen - zu langsam?
Ich habe hier mal wieder Code, der nicht so recht will ...


Delphi-Quelltext
1:
2:
3:
StatusLabel.Caption := 'Das wird etwas dauern ...';
ArbeiteVielUndHart(); // Das blockiert das GUI - da passiert eine Menge (überwiegend Downloads über fpHttpClient), leider noch nicht im Hintergrund...
StatusLabel.Caption := 'Fertig!';


Sichtbar ist immer nur "Fertig!", der Teil davor kommt gar nicht erst auf dem Bildschirm an.
Lazarus 2.0.6, Windows 10.

Ideen? :)


Narses - Di 07.01.20 01:03

Moin!

Hast du selbst geschrieben:
1. Theads. Das ist die Lösung.
2. Application.ProcessMessages; Das ist der Workaround.

cu
Narses


hydemarie - Di 07.01.20 01:11

Ah - an 2. hatte ich nicht gedacht - danke! (Getestet: Geht!)

Funktioniert synchroner HTTP-Download in einem Thread?


jaenicke - Di 07.01.20 08:57

Wobei es meistens besser ist nur ein Repaint zu machen (Abarbeitung der Paint-Nachrichten) statt Application.ProcessMessages (alle Nachrichten abarbeiten, auch solche, die potentiell die aktuelle Aktion stören).

Ja, ein Download funktioniert normalerweise problemlos in einem Thread.


OlafSt - Di 07.01.20 10:46

StatusLabel.Update bringts auch, aber ohne das waghalsige ProcessMessages.