Aber ich übergebe dem Thread doch die ObjectList. Hat der dann nicht eine vollkommen eigene Kopie davon? Und wenn ich dann das Original (aTmpFileList_ObjectList) ändere, dürfte das die Daten im Thread doch nicht ändern.
Klassen werden als Pointer übergeben, d.h. dein Thread arbeite mit derselben Liste, wie im Hauptthread.
Genau das war auch meine Vermutung @dGeek. Du übergibst dem Thread eine Instanz einer ObjectList und verwendest diese dann weiter. Du müsstest dir pro Durchlauf deiner äußersten Schleife eine neue Instanz der ObjectList erstellen. Die kannst du dann auch bedenkenlos nach Beendigung des Threads im Thread freigeben lassen.
Des Weiteren könntest du auch folgenden machen:
aTmpFileList_ObjectList := TObjectList<TFileEntry>.Create(False);
.
Das hat 2 Vorteile:
- Du brauchst nicht mehr zu casten, sondern bekommst beim Auslesen deiner ObjectList direkt ein Object vom Typ TFileEntry zurück
- Der False Parameter bewirkt, dass OwnsObjects beim Erzeugen deiner Liste auf False gesetzt wird (somit entfällt die zweite Zeile)