AW: sporadische Exception beim Freigeben von TLabels
Vielleicht ein WorkAround:
Vor dem Löschen eines Labels den Parent auf nil setzen. |
AW: sporadische Exception beim Freigeben von TLabels
Wie gesagt, ich habe jetzt zwei Vorschläge von hier in den Code übernommen und hoffe, dass das Problem damit behoben ist.
Beim Clear der Objectlist werden die einzelnen Controls freigegeben. Dabei wird (unter anderem) der Parent auf Nil gesetzt, wodurch das Parent benachrichtigt wird, dort wird es aus den Child-Controls ausgetragen etc. pp. Beim Realign des Parents kommt es dann aus unbekannter Ursache selten (sehr selten) zu einem Problem. Wenn man das unterbindet, sollte das erledigt sein. Die Funktion wird sehr oft aufgerufen (praktisch immer, wenn man ein Item auswählt), und ich habe nie Probleme damit beobachten können. Threads spielen an der Stelle keine Rolle - oder allenfalls indirekt, falls freigegebener Speicher "zu schnell" wieder von einem anderen Thread beansprucht wird. Dann aber sollte die Zugriffsverletzung eher an einer zufälligen Adresse passieren, und nicht an $08. Diese Labels werden auch nicht an vielen Stellen im Code benutzt. Sie werden zur Anzeige erstellt, dargestellt, und jedes Label bekommt ein paar EventHandler (MouseEnter/Leave für Underline-Effekt, OnDoubleClick). Das wars auch schon, kein wilder Spaghetti-Code dabei. Ein offensichtlicher Konzeptfehler liegt wohl nicht vor (sonst gäbe es andere Antworten, schätze ich :stupid: ). Von daher habe ich das jetzt (erstmal) abgehakt. Nach dem nächsten Release schau ich dann mal weiter. :lol: |
AW: sporadische Exception beim Freigeben von TLabels
Zitat:
|
AW: sporadische Exception beim Freigeben von TLabels
Im großen FastMM und Ähnlichem gibt es die Möglichkeit freigegebenen Speicher mit 0 oder besser einem Pattern überschreiben zu lassen.
Dann merkt man es besser, wenn ein Objekt doppelt freigegeben wird, bzw. wenn man versucht auf Speicher zuzugreifen, welchen es nicht mehr gibt. |
AW: sporadische Exception beim Freigeben von TLabels
Zitat:
Dem Kunden ist es egal, ob der Entwickler auch die Ursache zu 100% analysiert hat. Hauptsache er hat ein laufendes Programm (abhängig von der Häufigkeit und Auswirkung des Fehlers, seinem subjektiven Leidensdruck). Aber natürlich darf es nicht in "herumprobieren" ausarten, da stimme ich Dir vollkommen zu. Ein schwieriger Zielkonflikt... |
AW: sporadische Exception beim Freigeben von TLabels
Problem dabei ist, dass das Problem eventuell garnicht behoben ist, sich nur gerade nicht so zeigt und dann später wieder zuhaut.
Eigentlich sollte es keine Probleme geben, wenn man etwas freigibt, da es sich selbst vorher überall deregistrieren sollte, bevor es ganz weg ist, aber natürlich kann es hier helfen, wenn es hier irgendwo dadurch raucht, wenn man selbst die Komponente vorher aus der GUI rauszunehmen (Parent=nil). |
AW: sporadische Exception beim Freigeben von TLabels
Ich konnte vor Jahren ein ähnliches Problem umgehen, indem ich Controls nicht freigegeben sondern nur auf Visible := False gesetzt habe.
Die Freigabe habe ich dann später erledigt. Das Problem war wohl, dass Windows ein Control nochmal zeichnen wollte, obwohl es schon freigegeben war. Dieses hatte allerdings auch den Fokus zum Zeitpunkt der Freigabe. |
AW: sporadische Exception beim Freigeben von TLabels
Sowas kann passieren, wenn das Freigeben innerhalb eines Events des Controls geschieht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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