Einzelnen Beitrag anzeigen

swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
78 Beiträge
 
Delphi 10.4 Sydney
 
#1

Form.Resize während einem Synchronize / Thread-Handling

  Alt 30. Aug 2022, 01:31
Hallo,

ich habe ein etwas kniffeliges Problem und vielleicht hat jemand eine Idee, wie das zu lösen ist.

Plattfrom: Delphi 11.1, Firemonkey unter Windows

Programm startet und zeigt ein Form an.
Jetzt startet ein Thread, dieser berechnet aus einer Menge Daten ein Grafik.
Wenn der Thread die Grafik fertig gerechnet hat, ruft er einen Callback auf.
In diesem Callback mache ich ein Synchronize und rendere damit dann im Hauptthread die berechnete Grafik auf's Form.

Das funktioniert soweit.

Allerdings kann der Benutzer das Hauptform auch vergrößern.

Wenn das Form z. B. 600 Pixel breit und 400 Pixel hoch ist dann wird die Grafik auf diese Größe ins Form gerendert.

Jetzt zieht der Benutzer das Form größer, dann stoppe ich den Hintergrundthread (eine laufende Berechnung ist ja jetzt hinfällig) und starte den mit den neuen Form-Größen neu.

Jetzt kommt das Problem:
Der Thread ist fertig mit rendern und ruft den Callback auf.
Im Callback rufe ich Synchronize auf und zeichne die Grafik auf's Form.
Genau in dem Moment des Zeichnens zieht der Benutzer aber das Form größer.
Im Resize versuche ich jetzt den Hintergrundthread zu stoppen, was aber nicht klappt, da der ja im Callback im Synchronize die Grafik neu zeichnet.

Wie löst man sowas?
Und warum kann ich überhaupt das Form resizen wenn die Applikation durch das Abarbeiten des Callbacks eigentlich gar nicht im On-Idle ist?

Grüße

Stefan
Stefan Westner
  Mit Zitat antworten Zitat