Hilfe, ich verzweifel langsam,
ich habe in meinem Programm ein PageControl an der Seite, welches Frames aufnimmt. Diese Frames lege ich zur Laufzeit an,
mit dem Formular als Owner. Auf dem Frames ist eigentlich immer eine ElTree Komponente oder ein ListView.
Zum Freigeben der Frames rufe ich folgende Funktion auf:
Delphi-Quellcode:
procedure iFreeFrame(aFrame: TFrame);
var vName: string;
begin
IF Assigned(aFrame) THEN BEGIN
vName := 'unbekannt';
try
vName := aFrame.ClassName + '.' + aFrame.Name;
aFrame.Free; // Darf nicht, sonst crash
except
KDRProg1.KDRDebugger.LogError('Kann Frame nicht freigeben: ' + vName);
end;
aFrame := nil;
end;
end;
Leider fliegt das Programm sporadisch, besonders gerne dann, wenn die Liste Werte hat mit Fehlern raus. Diese kann ich auch nicht über try except abfangen. Er läuft nicht in meine except funktion.
Da ich Eurekalog einsetze kann man eigentlich schön nachvollziehen was passiert (die Bilder sind im Anhang).
Ich finde es aber nicht. Die Zeile in der Delphi über den Debugger beim Free stehen bleibt ist folgende:
Delphi-Quellcode:
function TCanvas.TryLock: Boolean;
begin
EnterCriticalSection(CounterLock);
try
Result := FLockCount = 0;
if Result then Lock;
finally
LeaveCriticalSection(CounterLock);
end;
end;
Ich habe auch schon alles probiert in einem Testprogramm. Da läuft alles wunderbar. Es ist halt nur im Gesamtprogramm, dass es auf Fehler kommt.
Weiss jemand, wo ich danach suchen kann? Ich bin da ratlos.
Lasse ich die Free Funktion weg, kommt das selbe beim Programmende.