Einzelnen Beitrag anzeigen

taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Win64 VCL Applikation Delphi 11.3 - not respondig

  Alt 18. Jan 2024, 15:40
Das wird vermutlich nicht reichen. Der Zugriff auf VCL-Controls aus einem Thread heraus ist eben nicht thread-safe. Selbst wenn man ein solches Handle synchronisiert erhält, bedeutet das nicht, dass es beim nächsten Mal auch noch gültig ist. VCL-Controls erzeugen immer mal wieder ihr Handle neu.

Solange die Controls permanent vorhanden sind, kann man Referenzen auf diese verwenden um die entsprechenden Aktionen synchronisiert auszuführen. Innerhalb dieser Aktion kann man auch das Handle verwenden, solange man sicher ist dass es während der Aktion nicht durch irgendwas neu erzeugt wird. Im Zweifelsfall an jeder Stelle das Handle Property verwenden und nicht irgendwo zwischenspeichern.
Ich bin mir nicht sicher ob ich Dich richtig verstehen. Die GUI besteht aus einzelnen "Playern" welche diese Panels, die Verbindungsscreens usw. kapseln. Diese werden auch dynamisch freigegeben und erzeugt. Wenn z. B. ein Player via API versucht eine Verbindung zu erzeugen welche nicht vorhanden ist und vor dem Timeout für diesen Player eine neue Aufschaltung kommt wird der bestehende freigegeben und ein neuer erzeugt.
Beim ersten synchronisierten Aufruf dieses Players wird dann das Panel.Handle sicher ermittelt und einer Klassenvariable gespeichert. Folgend wird immer diese Variable mit einem Getter der Klasse mit TCriticalSection abgesichert geholt und der API übergeben. Ist das so gemeint von Dir?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat