Hiho!
Habe ein kleines Programm, welches ausnahmsweise mal Threads nutzen soll (brauche ich normalerweise nicht).
Jetzt habe ich meinen Thread eingebaut der die komplette Verarbeitung übernimmt und alles an Daten in sich selbst speichert.
Hat eigentlich nur den Sinn, dass das Hauptfenster nicht regelmäßig bei der Verarbeitung einfriert.
Einzige Zugriffe auf das Hauptfenster sind lesend auf die graphischen Komponenten (TDateTimePicker.Date z.B.) und auf die <writeStatus>-Funktion des selbigen.
Diese Funktion schreibt halt einen Text in den Statusbereich des Fensters und sieht so aus:
Delphi-Quellcode:
// writes the given message to the status-label & log-file
procedure TfrmMain.writeStatus();
begin
csGui.Enter();
try
// write message to the status-label ...
lblStatus.Caption := logMsg;
lblStatus.Update();
Application.ProcessMessages();
// ... & log-file
if logFile <>
nil then
begin
logMsg := logMsg + #13#10;
logFile.
Write(PChar(logMsg)^, Length(logMsg) );
end;
except
on e:
Exception do
begin
logMsg := '
Fehler in Funktion <TfrmMain.writeStatus>: ' + e.
Message;
ShowMessage(logMsg);
end;
end;
csGui.Leave();
end;
An sich funzt das auch einwandfrei, also das Programm/der Thread rattert durch und die Nachrichten werden regulär angezeigt.
Wenn ich das Hauptfenster dann jetzt aber schließen möchte, erhalte ich die Fehlermeldung:
"Die Ausnahme Unbekannter Softwarefehler (0x...) ist an der Anwendung an Stelle 0x... aufgetreten"
und anschließend
"
Exception EOSError in Modul Programmname.exe bei 000....
Systemfehler Code 1400: Ungültiges Fensterhandle"
...
Diese Fehlermeldung hatte ich vor Einbindung des Threads und der Critical Sections nicht.
Da ich sämtliche Funktionen die ich nutze mit einem try-except Block versehen habe, kann ich also ausschließen, dass es sich in einer "meiner" Funktionen abspielt und nach Form.Close passiert.
Nur habe ich leider absolut keine Ahnung, was denn jetzt nich funktionieren sollte, denn alles funktioniert während des Programmes selbst einwandfrei, nur wenn ich es schließe knallt es...
Wurde der Thread nicht gestartet, erscheint diese Fehlermeldung ebenfalls nicht.
Kann es vielleicht sein, dass meine "ungeschützten" Lesezugriffe auf den DateTimePicker z.B. was damit zu tun haben?
Hat wer ne Idee?
Danke im Voraus
cu Patrick