wie gesagt, DoThread wird noch aufgerufen, nachdem das Fenster schon weg ist ... und dort entsteht auch die
Exception.
PS:
das ist schon "kraß"
while (true) and (Terminated = false) do
(true) ?
ja und dann wird es hier auch immer wieder gesagt: prüfe nicht auf True und False
while not Terminated do
@DeddyH: selbes System, aber ich hab Fehler (im Debugger gestartet)
[add]
also entweder prüfst du in .DoThread ob das das Fenster noch existiert und greifst dann nicht darauf zu,
oder die einfach Lösung für diesen Fall:
Delphi-Quellcode:
procedure TThreadForm1.Button1Click(Sender: TObject);
begin
Th1.Terminate;
Th2.Terminate;
Th3.Terminate;
//while not (alle_threads_beendet) do begin
Sleep(100); // Sleep(10);
Application.ProcessMessages; // Application.ProcessMessages;
//end;
Close;
end;
hier würde sich dann aber eine Schleife besser eignen, welche vor
Close; drauf wartet, daß alle Thread beendet wurden.