Damit funktioniert es bei mir:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Assigned(fTask) then begin
fTask.Cancel;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled := false;
Button1.Text := 'Task running';
fTask := TTask.Run(procedure()
begin
repeat
if TTask.CurrentTask.Status = TTaskStatus.Canceled then
Exit; // Exit statt Break
Sleep(10);
TThread.Synchronize(nil, procedure()
begin
Button1.Text := DateTimeToStr(Now);
end);
until false;
Sleep(100);
TThread.Synchronize(nil, procedure()
begin
Button1.Enabled := true;// Diese beiden Zugriffe müssen
Button1.Text := 'Start Task'; // auch synchronisiert werden
end);
end);
end;