Moin...
Zitat:
Im Create kannst Du ein Label übergeben
...keine gute Idee die Oberfläche mit Businesslogic zu mischen. Der Thread sollte die
VCL nicht kennen!
Was passiert wenn das Label nicht mehr existiert? Bumm.
Damit ist auch gemeint, daß der Thread in eine separate
Unit gehört und nicht in die Form
Unit.
PS: Zum Testen/Lernen ist es OK.
Besser:
Der Thread hat ein Event. Dieses Event ist in der Oberfläche an einen Eventhandler gebunden. Der Thread gibt den Wert (was auch immer) über das Event an den Eventhander der Oberfläche weiter.
Delphi-Quellcode:
type
TOnChangeEvent = procedure(Sender: TObject; MaxValue: Integer; CurrentValue: Integer) of object;
TTheThread = class(TThread)
private
FOnChange: TOnChangeEvent;
public
property OnChange: TOnChangeEvent read FOnChange write FOnChange;
procedure Execute; override;
end;
...
if (I1 >= 1000) then
begin
Inc(I2);
Synchronize(
procedure
begin
if Assigned(FOnChange) then
begin
FOnChange(Self, I1, I2); //Beispiel
end;
end);
I1 := 0;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
FTheThread := TThread.Create;
FTheThread.OnChange := DoOnChange;
end;
...
procedure TForm1.DoOnChange(Sender: TObject; MaxValue: Integer; CurrentValue: Integer);
begin
CounterLabel.Caption := CurrentValue.ToString;
end;