AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads und UI aktualisieren

Ein Thema von TigerLilly · begonnen am 29. Okt 2019 · letzter Beitrag vom 30. Okt 2019
Antwort Antwort
Seite 1 von 2  1 2      
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#1

Threads und UI aktualisieren

  Alt 29. Okt 2019, 15:39
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:
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;
Was übersehe ich?
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 08:11
Guten Morgen,

vielleicht hilft der SO Artikel: https://stackoverflow.com/questions/...vs-synchronise

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 08:24
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?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#4

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 08:30
Geht es denn mit Queue ?
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 09:09
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) ?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#6

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 10:14
Du hast 2 verschiedene Labels Status und Running,
verstehe ich 1.) und 2.) richtig das lblStatus funktioniert, und nur lblRunning nicht ?
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 10:35
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?)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 10:54
Ich kann aus dem Task heraus beide aktualisieren (bzw natürlich das ganze UI).
Nein! Die Gui macht das selbst - mit den daten die sie erhält.

Gruß
K.H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 11:49
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#10

AW: Threads und UI aktualisieren

  Alt 30. Okt 2019, 11:52
Evtl. liegt es daran das ein Label.Repaint; fehlt, sowas kenne ich allerdings eher von CrossPlattform.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz