Ich finde es gerade nirgendwo dokumentiert, aber so wie die
VCL nicht thread-safe ist, würde ich nie Windows-Handles zwischen Threads austauschen. Das knallt im Zweifel irgendwann irgendwo ohne dass man den Kontext erkennt.
Den Icon-Stream zwischen den Threads auszutauschen hat zudem den Vorteil, dass Duplikate einfach vermieden werden können. Und ein Icon-Cache macht gerade bei Netzwerklaufwerken enorm sein.
Spätestens dann machen anonyme Methoden/Threads immer weniger Sinn und schaden massiv der Übersichtlichkeit.
Ich würde das so umsetzen (da fehlt noch ein wenig Fehlerbehandlung, und verbessern kann man natürlich immer):
https://github.com/CCRDude/tlistview-icon-cache-demo
Ist LCL, aber
VCL dürfte identisch sein, lediglich die Generics müssten angepasst werden, da nutze ich FreePascal sonst immer im objpas-Modus und bin mir nicht sicher, wie die entsprechenden Delphi-Klassen heißen.