Moin !
Ich überlege schon eine ganze Weile wie man es hinbekommt, ein visuelles Element (inmeinem Fall ein TChart) zu speichern bzw. zu laden ohne den Hauptprozess dabei zu belasten oder gar zu blockieren (verwende
MDI Childs mit jeweils einem TChart).
Dabei geht es konkreter um diese drei Zustände:
* laden
* speichern während Daten hinzugefügt werden
* speichern wenn keine Daten hinzugefügt werden
Das ganze ist nicht wirklich ohne Threads zu lösen. Aber da fangen dann die Probleme auch schon wieder an - Stichwort "Threads und Zugriff auf
VCL Komponenten".
Egal wie ich es versuche, ich habe immer Situationen in denen mein Hauptthread geblockt wird. Das mag aber auch daran liegen, das ich derzeit die Daten direkt in das Chart eintrage. Nehmen wir nur das Speichern während noch Daten eingetragen werden.
Ich erzeuge mir einen MemoryStream, kopiere (in diesem Fall) das Chart in den Stream, übergebe den Stream an einen Thread der dann den Stream als Datei speichert.
Aber auch hier hat man schon wieder die Situation dass das Kopieren des Charts in den Stream im Hauptthread erledigt wird. Bei großen Datenmengen -> Blockingpoint
Kurzum, kann vielleicht mal jemand erklären wie man dieses Problem grundlegend anpacken würde? Das muss gar nicht mal auf ein Chart bezogen sein. Es ist übrigens nicht damit getan, einfach nur (im Fall des Charts) die Rohdaten zu speichern. Denn im Chart werden Charttools eingebunden die natürlich mit gespeichert werden müssen.
Ich hatte schon die Idee das man das evtl. über Windowsbotschaften lösen könnte. Aber der Thread hat ja keine MessageQueue. Insofern ist das auch hinfällig.