Ich selbst habe dafür die nötigen Fenster rein über die
API erstellt. Dann sind die nämlich threadsicher und ich kann von mehreren Threads aus problemlos über Events auf die
GUI zugreifen ohne diese zu synchronisieren.
Allerdings ist das natürlich nicht gerade der Weg, den man in Delphi gehen möchte...
Wenn es um eine Listenanzeige geht, benutze ich dafür in der Tat die VirtualStringTree. Dann aktualisiere ich gesichert per TMonitor die Daten und löse einfach ein Neuzeichnen aus.