Dein Thread greift unsynchronisiert auf visuelle Komponenten zu. Das kann nicht klappen, denn die sind nicht threadsicher. Daher sind die Folgen z.B. solche Deadlocks. Zugriffe darauf müssen im Hauptthread erfolgen.
Sprich man berechnet und ermittelt im Thread die Daten und zeigt die dann im Hauptthread an.
Für deinen Fall würde ich die VirtualStringTree nehmen. Denn die ist sehr schnell. Außerdem kannst du dort Objekte an die Zeilen hängen, die Daten für die Spalten erst bei der ersten Anzeige ermitteln (dein splitten) und so Zeit sparen.
https://jam-software.de/virtual-treeview/?language=EN