Zitat von
BlueStarHH:
Wie bekomme ich also beides (Beenden per Klick und automatisch freigeben) unter einem Hut?
Klaus hat ja schon erklärt, warum der Fehler auftaucht: du wartest auf einen Thread, der sich beim Beenden selbst frei gibt. Das kann leicht schief gehen.
Eine Möglichkeit ist, beim Button-Click ein Flag zu setzen und den Code, der nach Beenden des Threads ausgeführt werden soll, im MyThreadTerminate aufzurufen.
Delphi-Quellcode:
procedure TForm1.MyThreadTerminate(Sender: TObject);
begin
AThread := nil;
if FlagDoSomeCode then begin
FlagDoSomeCode := false;
DoSomeCode;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(AThread) then
begin
FlagDoSomeCode := true;
AThread.Terminate;
end
else begin
DoSomeCode;
end;
end;