Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.003 Beiträge
 
Delphi 12 Athens
 
#13

AW: MultiThreading

  Alt Heute, 12:33
Mit ein klein wenig mehr Aufwand und Umbau ließe sich das aber auch ohne Freeze realisieren. Ob das bei den genannten 5 Sekunden nötig ist, kann sicher diskutiert werden.
so hätte ich es gemacht
Delphi-Quellcode:
myform.OnClick(Sender:tObject);
Bgein
  MyGUIListview.enabled := false;
  MYGUiAnyIndicator.visibe := true; // Anzeige Animation im Hauptthread das die Liste aktualisiert wird.
  
  TThread.CreateAnonymousThread(
      procedure
      Begin
        var data:Tarray<TMyItemdataRec> := LoadDataForaShitLoadOfTime; // das dauert.

        //laden fertig ? ok call back in den GUI Thread mit ForceQueue,
        // es kann sein dass der Thread schneller fertig ist als die GUI
        // braucht um die liste disabled neu zu zeichnen und ich mag
        // es in der richtigen Reienfolge wegen BeginUpdate udn EndUpdate
        // daher ForceQueue;
        TThreading.ForceQueue(nil,
          Procedure
          begin
            MyGUIListview.BeginUpdate;
            MyGUIListview.clear;
            For Var i:integer := 0 to high(data) do
              AddTMyListview(data[i]);
            MyGUIListview.Enabled := true;
            MyGUIListview.EndUpdate;
            MYGUiAnyIndicator.visible := false;
          end // procedure
        )//TThreading.ForceQueue(nil,
      end // procedure
  ).Start; // TThread.CreateAnonymousThread(
end;//myform.OnClick(Sender:tObject);
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (Heute um 12:50 Uhr)
  Mit Zitat antworten Zitat