Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#7

AW: "Unendlicher Progressbar"

  Alt 8. Jul 2020, 15:49
Wenn man im Hautthread arbeiten muß,
dann muß man eben selber regelmäßig für eine Aktualisierung der GUI sorgen, da sie währeddessen ja keine Zeit bekommt.

* Form.Repaint bzw. Komponente.Repaint (Achtung, Windows sieht hier dennoch die Form nach einer Weile als "hängend" an)
* Application.ProgressMessages; (aufpassen, da hier alle Messages verarbeitet werden ... nicht dass da zwischendrin "unpassende" Aktionen starten)
* * z.B. Nutzer klickt nochmal auf den Button (dann läuft das mehrmals ineinanderverschachtelt)
* wir haben und mal ein eigenes "ProgressMessages" gebaut, was nur gewisse Messages ausführt (Windows-HangUp-Erkennung, Zeichenaktionen usw., aber keine Timer-, Maus oder Tastaturereignisse)

* viele machen das in einer Schleife alle X Durchläufe (unschön, da PCs nicht immer gleich schnell sind)
* ich mach es zeitabhängig, also in der schleife prüfen wann das letzte Mal und dann alle X Millisekunden (z.B. 100/200/250/500/1000ms ... je nach Anwendungsfall)



OK, das Erstellen/Freigeben von Komponenten muß in dem Thread erfolgen, wo die Form erstellt wurde und behandelt wird.

Füllen kann man manche Komponenten aber auch im Thread.
* oftmals gibt es eine BeginUpdate-Methode, welche die Komponente von der automatischen Aktualisierung sperrt
* und wenn beim Update des Inhaltes nicht auf globale Objekte zugegriffen wird, die noch von anderswo in Verwendung sind,
* * dann kann man BeginUpdate und EndUpdate im Hauptthread ausführen und den Rest dazwischen auslagern
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Jul 2020 um 15:53 Uhr)
  Mit Zitat antworten Zitat