![]() |
Threads und UI aktualisieren
Ja, das sind alles ähnliche Fragen, sorry, aber trotzdem danke für eine Antwort:
Die Intention: 1) Eine Aufgabe, die lange dauert, wird im Hintergund ausgeführt und aktualisiert das UI. Das funktioniert gut. 2) Das UI wartet bis die Aufgabe fertig ist und siganlisiert seineseits, dass da noch was arbeitet. Hier hab ich das Problem. Sobald ich TTAsk.WaitForAll aufrufe, wird nichts mehr aktualisiert.
Code:
Was übersehe ich?
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 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); Inc(i); end; end; |
AW: Threads und UI aktualisieren
Guten Morgen,
vielleicht hilft der SO Artikel: ![]() Grüße Klaus |
AW: Threads und UI aktualisieren
Den Artikel kenne ich , danke. Der Punkt ist, ich verstehe nicht. Warum blockiert das Warten auf das Taskende mit TTask.WaitForAll die Ausgabe via Synchronize?
|
AW: Threads und UI aktualisieren
Geht es denn mit Queue ?
|
AW: Threads und UI aktualisieren
Ich will 2 Dinge verstehen:
1) Feedback im UI WÄHREND der Task läuft: Task sagt: Ich laufe noch" 2) Feedbackim UI BIS der Task zu Ende ist. UI sagt: "Task läuft noch". 1) geht gut mit Synchronize, Messages, Events, Queues. 2) ? |
AW: Threads und UI aktualisieren
Du hast 2 verschiedene Labels Status und Running,
verstehe ich 1.) und 2.) richtig das lblStatus funktioniert, und nur lblRunning nicht ? |
AW: Threads und UI aktualisieren
Ich habe 2 Lables, das stimmt.
Ich kann aus dem Task heraus beide aktualisieren (bzw natürlich das ganze UI). Ich kann nicht aus dem UI den Status des Tasks anzeigen. Dafür hätte ich gerne Ideen. (Timer zB und den TaskStatus abfragen?) |
AW: Threads und UI aktualisieren
Zitat:
Gruß K.H |
AW: Threads und UI aktualisieren
Naja, je nach Methode stimmt das mehr oder weniger.
Aber ich würde gern verstehen, warum im Codestück unten so gar nichts aktualisiert wird. |
AW: Threads und UI aktualisieren
Evtl. liegt es daran das ein Label.Repaint; fehlt, sowas kenne ich allerdings eher von CrossPlattform.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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