Zitat:
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var
thread: TThread;
begin
thread := TThread.CreateAnonymousThread(
procedure()
begin
//
end
);
thread.OnTerminate := handleThreadTerminate;
thread.Start();
end;
procedure TForm3.handleThreadTerminate(Sender: TObject);
begin
raise EProgrammerNotFound.Create(EmptyStr);
end;
Das ist aber ein vollkommen korrektes Verhalten, wenn tritt in einem Thread eine
Exception auf und rauscht bis zum Windows durch, dann beendet Windows nunmal den kompletten Prozess.
Es ist also ganz normales Verhalten, da TThread nur das Execute per Try-Except absichert und in OnTerminate diese
Exception bereit stellt.
Wer sollte denn Die
Exception von OnTerminate bekommen, wenn danach nichts mehr kommt? Also gibt es keinen Grund diese
Exception abzufangen.
Leider ist die
RTL bissl blöd, dass sie diese
Exception einfach verschluckt, wenn keiner in OnTerminate darauf reagiert (was fast nie gemacht wird), womit also eigentlich TThread diese Exceptions total falsch behandelt.