Sitze gerade vor einem anderen PC aber im Prinzip so:
Delphi-Quellcode:
type
TOnProgress = procedure(Sender: TObject; Progress: UInt32) of Object;
TMyWorker = class(TObject)
private
FOnProgress : TOnProgress;
procedure ReportProgress(Progress: UInt32);
public
procedure DoIt;
property OnProgress : TOnProgress read FOnProgress write FOnProgress;
end;
procedure TMyWorker.Dot;
begin
TTask.Run(
for var i := 0 to 100 do
begin
ReportProgress(i);
sleep(50);
end);
end;
procedure TMyWorker.ReportProgress(Progress: UInt32);
begin
TThread.Queue(procedure
if Assigned(FOnProgress) then
FOnProgress(self, Progress);
end);
end;
[..]
TMainForm = class(TForm)
pb_Progrsss : TProgressBar;
Label1: TLabel;
private
FWorker : TMyWorker ;
public
procedure OnProgress(Sender: TObject; Progress: UInt32);
procedure DoSomething;
end;
[..]
procedure TMainForm.OnProgress(Sender: TObject; Progress: UInt32);
begin
Label1.Caption := Progress.ToString;
pb_Progress.Position := Progress;
end;
procedure TMainForm.DoSomething;
begin
FWorker.DoIt;
end;
So ungefähr. Ja, was wirklich im Task läuft ist noch etwas demo mäßig und wird später ersetzt.