Interessantes Thema.
Habe ein bisschen ausprobiert:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
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
MainForm.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);
lblStatus.Repaint; // lblRunning wird aktualisiert
lblRunning.Repaint; // bringt nix
//self.Update; // nur lblRunning wird aktualisiert
//Application.ProcessMessages; // beide werden aktualisiert
Inc(i);
end;
end;