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.