Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TChart Unterschiede zwischen XE2 und XE7? (https://www.delphipraxis.net/188206-tchart-unterschiede-zwischen-xe2-und-xe7.html)

dapama 9. Feb 2016 17:13

TChart Unterschiede zwischen XE2 und XE7?
 
Hallo,

ich habe ein XE2-Projekt in dem in einem Thread ein Formular erzeugt wird welches ein TChart beinhaltet. Dieses Projekt läuft unter XE2 einwandfrei.

Wenn ich das gleiche Projekt unter XE7 starte, wird beim Form.create(im Thread) eine Exception erzeugt. Nehme ich das TChart aus der Form raus, kann das Formular erzeugt werden.

Hat jemand eine Idee woran das liegen kann?

Bernhard Geyer 9. Feb 2016 17:42

AW: TChart Unterschiede zwischen XE2 und XE7?
 
Zitat:

Zitat von dapama (Beitrag 1329894)
Hallo,

ich habe ein XE2-Projekt in dem in einem Thread ein Formular erzeugt wird welches ein TChart beinhaltet. Dieses Projekt läuft unter XE2 einwandfrei.

Wenn ich das gleiche Projekt unter XE7 starte, wird beim Form.create(im Thread) eine Exception erzeugt. Nehme ich das TChart aus der Form raus, kann das Formular erzeugt werden.

Hat jemand eine Idee woran das liegen kann?

Ganz einfach: Du hast einfach nur verdammt viel Glück gehabt das deine Lösung unter XE2 funktionierte.

GUI und Threads ist nicht gut. Alle GUI-Aktionan (Formulare, ... TChart) müssen im Hauptthread der Anwendung erledigt werden.
Die WinAPI (was hinter TForm/TChart letztendlich verwendet wird) ist Thread-Affine. Ein Handle ist immer nur im erzeugenden Thread gültig.
Und da die VCL oft auch mal auf die TScreen oder TApplication-Instanz zugreift (die ja im Hauptthread erzeugt wurde) kracht es früher oder später wenn du versuchst ein Formular im Thread zu erzeugen und zu verwenden.

himitsu 9. Feb 2016 21:22

AW: TChart Unterschiede zwischen XE2 und XE7?
 
Gültig sind diese Handle übeall im Programm, aber die VCL/Windows-Komponenten binden sich an den erzeugenden Thread, was vorallem darin endet, dass die Messages von diesem Thread verarbeitet werden müssen.

Ansonsten ist Vieles halt nicht threadsave und es gibt Synchronisationsprobleme, wenn man aus einem anderen Thread darauf zugreift.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz