[gelöst] Bei FormClose Events verhindern

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
NoCee
Beiträge: 146
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.0.6.0 FPC 3.0.4 )
CPU-Target: 32/64Bit
Wohnort: Ulm

[gelöst] Bei FormClose Events verhindern

Beitrag von NoCee »

Guten Abend allerseits,

ich habe ein Programm am laufen das mehrere Netzwerkverbindungen
offen hat und eventuell mehrere Timer laufen.
Jetzt hab ich regelmäßig beim Schließen der Form das Problem
daß da irgendwie Events gefeuert werden und vermutlich schon Teile der Form
weg sind auf die im Event zugegriffen wird.
Im OnClose schließe ich die Netzwerkverbindungen, aber manchmal kommt da
eine Netzwerkfehlermeldung im OnError Event. Da soll er eine Fehlermeldung ausgeben
und da knallt es dann.
Ich schließe ja schon alles, stoppe alle Timer aber ab und zu kommt halt ein Event.

Wie kann ich das verhindern, oder muß ich da irgendwo eine Pause einbauen damit
die Events durch sind.
Ich bin gerade ziemlich ratlos, zumal ich nicht mal weiß nach was ich suchen soll.

Für Tipps wäre ich wie immer unheimlich dankbar.
Grüße
NoCee
Zuletzt geändert von NoCee am Mo 22. Nov 2021, 16:39, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4910
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Bei FormClose Events verhindern

Beitrag von af0815 »

Ich setze die Eventhandlers zurück auf nil. Damit sollten die nicht mehr auf hängende Referenzen zugreifen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1014
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Bei FormClose Events verhindern

Beitrag von fliegermichl »

Normalerweise ist TForm.OnCloseQuery dafür zuständig.
In CanClose gibst du true zurück, wenn das Formular sicher geschlossen werden kann.

Evtl kann man noch eine boolsche Variable z.B. ClosePending setzen und dann mit einem weiteren Timer
in regelmäßigen Abständen prüfen, ob das Formular nun geschlossen werden kann.

NoCee
Beiträge: 146
Registriert: Do 3. Mär 2011, 21:34
OS, Lazarus, FPC: WinXp/7/10 Opensuse13.2/Leap15.3 (L 2.0.6.0 FPC 3.0.4 )
CPU-Target: 32/64Bit
Wohnort: Ulm

Re: Bei FormClose Events verhindern

Beitrag von NoCee »

Ich habs jetzt in OnCloseQuery verlagert
und mehrfach ausprobiert.
OnCloseQuery kannte ich noch nicht.
Derzeit funktioniert das so.
Vorher hab ich noch ausprobiert ob das mit einem sleep() im OnClose
in der letzten Zeile auch funktionieren würde.
Auch das hat funktioniert.
Alle Events anzupacken wäre ein bisschen aufwändig geworden.
Aber ich kann das in Zukunft von vornherein gleich mit einbauen.

Vielen Dank für die Tips
Gruß
NoCee

Antworten