Erstmal vielen Dank für deinen Support trotz Code-Verweigerung.
Wie gesagt, liegt der Code nun als Komponente vor und ich rufe
Destroy nicht selber auf, es handelt sich um den überschriebenen Destruktor:
Delphi-Quellcode:
destructor TImgStdListView.Destroy;
begin
if Assigned(FThumbnailThread) then
begin
SuspendThread;
FThumbnailThread.Terminate;
FThumbnailThread.Resume;
WaitForSingleObject(FThumbnailThread.Handle, 3000);
end;
if Assigned(FDirWatcherThread) then
begin
FDirWatcherThread.Terminate;
WaitForSingleObject(FDirWatcherThread.Handle, 3000);
end;
if Assigned(FCacheList) then
begin
ClearTransferList;
FCacheList.Free;
end;
if Assigned(FObjectList) then
FObjectList.Free;
if Assigned(FMemoryInfo) then
FMemoryInfo.Free;
OleUnInitialize;
inherited;
end;
Der Thread ist gerade dabei das hier auszuführen wenn der Fehler geworfen wird:
if FListView.Items[I].ImageIndex = 0 then
Nur sollte Items noch vorhanden sein, solange Destroy nicht durchlaufen wurde.
Hat beim Entwickeln auch IMMER funktioniert. auch ohne Synchronize.
Grüße
Sebastian
[EDIT:]
Durchsteppen ist schwierig, da ich auf Anhieb nicht erkenne wann der ListView zerstört wird. Wo geschieht das durch eine Parent-Komponente genau?