Einzelnen Beitrag anzeigen

SusiT

Registriert seit: 15. Mai 2014
29 Beiträge
 
#1

eigenartiges Verhalten bei Onclose eines Formulars

  Alt 11. Okt 2023, 22:29
Guten Abend.

Mir ist ein eigenartiges Verhalten beim Ablauf des Schließens eines Formulars aufgefallen und mich interessiert ob dieses Verhalten bekannt ist.


Der normale Ablauf bei Schließen eines Formulars ist in der Regel folgender:


onClose Event wird ausgelöst (Klick auf Kreuz)

Formularvariable wird Released -> Event wird erzeugt

OnDestroy Prozedur wird aufgerufen


In OnDestroy werden alle möglichen Objekte FreeAndNil gesetzt und die Speicherbereinigung findet statt.


Ich habe ein sehr komplexes Formular mit sehr viel Inhalt.

Jetzt das komische Verhalten:

In bestimmten Konstellationen schaffe ich es, dass das Formular schneller schließt als es tatsächlich seinen eigenen Code durchläuft und abarbeitet.
Wenn ich während der Abarbeitung einer Prozedur des Formulars das Formular schließe (eine Prozedur die eben mehr Zeit benötigt) , dann wird OnDestroy schneller erreicht und ausgeführt als die Abarbeitung der Prozedur die noch in Arbeit ist.
Das hat nen blöden Nebeneffekt. In OnDestroy werden Objekte auf nil gesetzt, die in der noch nicht fertigen Prozedur verwendet werden. Die Folge ist eine Exception mit Zugriffsverletzung und einer ganzen Menge anderer unschöner Fehler.

Jetzt frage ich mich, wie kann ich in oder vor Destroy erkennen, dass noch irgendwelcher Code bearbeitet wird?

Ähnlich wie bei waitfor im Threading.

Dieses parallele Verhalten deutet auch darauf hin, das hier 2 Threads am Laufen sein müssen? Main Thread vom Formular und ein Schließen Thread?



Viele Grüße
  Mit Zitat antworten Zitat