Hmmm..
Damit deine Thread-Variable auf nil gesetzt wird, brauchst Du so etwas:
( Und wieso die Globale Variable 'MyThread', obwohl nur innerhalb der Form darauf zugegriffen wird !!)
Delphi-Quellcode:
TForm1 = class(TForm)
...
procedure Button2Click(Sender: TObject);
private
procedure OnMyThreadTerminate(Sender: TObject);
protected
MyThread : TMyThread;
public
{ Public-Deklarationen }
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if assigned(MyThread) then
begin
MyThread.Terminate; // Setzt MyThread nicht auf NIL, d.h. nächster Button2Click führt wieder in diesn Block
Button2.Enabled := false; // Erst benutzbar machen, wenn Thread wirklich weg!
end
else
begin
Button2.Caption := 'Terminate Thread';
MyThread := TMyThread.Create(true); // Create suspended--secondProcess does not run yet.
MyThread.FreeOnTerminate := true; // You do not need to clean up after termination.
MyThread.OnTerminate := OnMyThreadTerminate; // Damit die Form benachrichtigt wird !!!!
MyThread.SleepTime := SpinEdit1.Value;
MyThread.Resume; // Now run the thread.
end;
end;
procedure TForm1.OnMyThreadTerminate(Sender: TObject);
begin
if Sender = MyThread then begin
MyThread := nil; // Nur nil, Free macht er selber!
Button2.Caption := 'Start Thread';
Button2.Enabled := true; // Erst benutzbar machen, wenn Thread wirklich weg!
end;
end;