Einzelnen Beitrag anzeigen

fisipjm

Registriert seit: 28. Okt 2013
251 Beiträge
 
#1

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

  Alt 27. Okt 2021, 14:04
Delphi-Version: 10.4 Sydney
Hi mal wieder in die Runde, in letzter Zeit spam ich das Forum ganz schön zu, aber die Hilfe ist einfach immer spitze

Folgendes "Problem".

Ich habe eine Form als "Muster Form" die Ruft optisch immer in gleicher Optik aufbereitete aber unterschiedliche Daten ab.
Auf der Form liegen komponenten zum REST Abruf und eine TAniIndicator komponente. ich hab im Grunde aktuell 2 Events, show und close. Die hab ich folgendermaßen aufgebaut und die Funktionieren auch im normalen Programmablauf.


Delphi-Quellcode:
procedure TMainForm.FormShow(Sender: TObject);
begin
 StringGridBindSourceDB1.Visible:=false;
  AniIndicator1.Position.X:= width/2 - AniIndicator1.Width;
  AniIndicator1.Position.Y:= Height/2 - AniIndicator1.Height;
  AniIndicator1.Enabled:=true;
  TTask.run(
  procedure
  begin
    LaaaaaangsameRESTAbfrageMachen;
    tthread.Synchronize(nil,procedure
    begin
      StringGridBindSourceDB1.Visible := true;
      AniIndicator1.Enabled:=false;
      AniIndicator1.Visible:=false;
    end);
  end);
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caFree;
end;
Ich bin komplett neu im Thema parallele Programmierung und hab das Gefühl da gibt's noch sehr viel für mich zu lernen. Mein Problem ist, wenn der Benutzer ungeduldig ist und die Form schon während des Ladevorgangs Schließt, dann crasht mir die Form komplett. Ich bekomme erst mal eine AccessViolation und danach ist die Form aber weiterhin im Objektinspektor verfübar anstatt sauber freigegeben. Ich geh mal davon aus ich muss das irgendwie im Thread abfangen, aber ich habe absolut keinen Ansatz wie.
Vielen Dank schon mal
  Mit Zitat antworten Zitat