Ja, erstmal
keine Threads.
Und dann ist eine TComponentList besser, als eine TObjectList.
Oder einfach ein TComponent als Container/Liste. (weil Delphi leider Ersteres hat, aber mal wieder nicht öffentlich und man es daher selber bauen muß)
Bzw. ein Owner-Objekt nutzen und dann statt TagLabelList.Clear diesen Owner freigeben und einen Neuen erstellen.
Wo sind denn die Labels drauf?
Das wird nicht zufällig freigegeben,
bevor du deine TagLabelList leer machst?
Genau dafür ist eine ComponentList, denn dort löscht das Label sich selbst raus, wenn es von jemand Anderem freigegeben würde.
Zitat:
Das sieht für mich so aus, als würde das Parent-Panel versuchen, während des Freigebens der Label-Liste nochmal auf Objekte zuzugreifen
Zitat:
Das wird nicht zufällig freigegeben, bevor du deine TagLabelList leer machst?
Nicht nochmal, sondern vorher ja
immer.
Nicht nur der Owner gibt etwas frei, sondern auch der Parent.
Ist ein krankes Verhalten, was die
VCL leider von der
GDI übernommen hat (dort gibt es keine expliziten Owner, sonden nur einen Parent, der Alles macht),
obwohl es garnicht nötig gewesen wäre, weil die WinControls auch überleben können, selbst wenn das innere HWND und
DC noch nicht
mehr existiert.
TComponents haben aber ein intenes Notifications-Systen, womit man sich informieren lassen kannt, wenn es freigegeben wird. (das nutzt der Owner, Parent und z.B. eine ComponentList)