Type
TResultData =
Record
Success:boolean;
Error:
String;
Data:Tarray<TMyItemdataRec>;
end;
myform.OnClick(Sender:tObject);
Bgein
MyGUIListview.enabled := false;
MYGUiAnyIndicator.visibe := true;
// Anzeige Animation im Hauptthread das die Liste aktualisiert wird.
TThread.CreateAnonymousThread(
procedure// ThreadProcedure
Begin
var aResult:TResultData := LoadDataForaShitLoadOfTime;
// das dauert.
If aResult.Success
then
Begin
//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 //ForceQueue
begin
If aResult.Success
then
Begin
MyGUIListview.BeginUpdate;
MyGUIListview.clear;
For Var i:integer := 0
to length(aResult.data)-1
do
AddTMyListview(aResult.data[i]);
MyGUIListview.Enabled := true;
MyGUIListview.EndUpdate;
MYGUiAnyIndicator.visible := false;
end //If aResult.Success then
else
Begin
Log('
LoadDataForaShitLoadOfTime:'+aResul.error);
MyGUIListview.Enabled := true;
MYGUiAnyIndicator.visible := false;
ShowMessage(aResul.error);
end //else If aResult.Success then
end // procedure //ForceQueue
)
//TThreading.ForceQueue(nil,
end // procedure// ThreadProcedure
).Start;
// TThread.CreateAnonymousThread(
end;
//myform.OnClick(Sender:tObject);