![]() |
AW: Threads und UI aktualisieren
Interessantes Thema.
Habe ein bisschen ausprobiert:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
var aTasks: array of ITask; i: Integer; begin SetLength(aTasks, 1); aTasks[0] := TTask.Create( procedure() var i: Integer; begin for i := 0 to 100 do begin Sleep(100); TThread.Synchronize(nil, procedure begin MainForm.lblStatus.text := IntToStr(i); end); end end); aTasks[0].Start; i := 1; while not TTask.WaitForAll(aTasks, 1000) do begin lblRunning.text := 'Running ' + IntToStr(i); lblStatus.Repaint; // lblRunning wird aktualisiert lblRunning.Repaint; // bringt nix //self.Update; // nur lblRunning wird aktualisiert //Application.ProcessMessages; // beide werden aktualisiert Inc(i); end; end; |
AW: Threads und UI aktualisieren
Zitat:
Gruß K-H |
AW: Threads und UI aktualisieren
Zitat:
Du kannst nicht einen Thread erzeugen und dann "modal" warten... Du musst immer erst die Kontrolle an den UI-Tread/ Main-MessageQueue zurück geben. Nur wenn die Main-Messagequeue läuft, kann sich die UI aktualisieren. Also überhaupt auf Queue oder Synchronize reagieren. "Früher" hat man zur "NOT" Application.Processmessages aufgerufen. Aber wie wir alle wissen,sollte man das nur im "NOTFALL" machen, weil es in der Regel nur zu Problemen führt. Beispiel : Ein scheinmodales Fenster ruft in einer Schleife Application.Processmessages auf, daher können andere Programmteile aufgerufen werden, die dann in dieser Schleife laufen... Probleme sind vorprogrammiert. Mavarik PS.: Abgesehen davon: Unter VCL geht Dein Aufruf vielleicht - Unter FMX wird die Button Click Animation schon nicht mehr gezeigt (je nach Style). Du solltest auch den Button auf enabled := false setzen. (So wie in meinen Beispiel aus dem anderen Thread) |
AW: Threads und UI aktualisieren
Zitat:
WaitForAll(aTasks, 1000) Wie Mavarik schon sagt: scheinmodal :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz