Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: TTask.run und Form.close wie geht das richtig?

  Alt 27. Okt 2021, 14:55
Delphi-Quellcode:
TThread.Synchronize(nil,procedure
begin
  if not (hier prüfen, ob die Form noch vorhanden ist) then
    Exit;
  StringGridBindSourceDB1.Visible := true;
Natürlich nicht auf Self oder irgendwas von der Form zugreifen.

Self kann man maximal verwenden, um z.B. in Screen.Forms zu suchen und dort ausschließlich den Zeiger vergleichen.
Gleichzeitig hoffen, dass es keine neue Form gibt, welche inzwischen an der alten Stelle ihren Speicherplatz fand.

Und nicht auf die Idee kommen vor dem Synchronize zu prüfen, weil während diesem Aufruf kann die Form immernoch verschwinden.




Aber, da du garantiert in LaaaaaangsameRESTAbfrageMachen auf Dinge in der Form zugreifst, bleibt nur noch OnCanClose der Form zu nutzen und wenn der Thread noch läuft, dann das Schließen abberechen.
Achtung: Free/Destroy im Code aufgerufen ignoriert OnClose und OnCloseQuery.

Und natürlich hast du da auch aufgepasst, dass im LaaaaaangsameRESTAbfrageMachen alles thread-save ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat