Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.003 Beiträge
Delphi 12 Athens
|
AW: MultiThreading
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)
|