Hast du das EVA-Prinzip (Eingabe-Verarbeitung-Ausgabe) beachtet?
Ein Thread-Objekt bekommt alle seine Inputdaten als Kopie schon vor dem Start übergeben.
(z.B. über Properties der Threadklasse)
Soll ein Thread z.B. Daten per
FTP herunterladen, dann bekommt er ein fertig initialisiertes IdFtpClient-Objekt übergeben.
Der Hauptthread gibt dem Thread von Aussen alles was er braucht; der Thread soll sich um nichts kümmern müssen.
Während der Thread läuft sollte die Synchronisierung mit dem Hauptthread auf ein Minimum beschränkt bleiben.
Nachdem der Thread fertig ist präsentiert er seine Ergebnisse über "Output"-Properties.
Der Hauptthread (benachrichtigt über das Event OnTerminate) holt sich die Daten ab und vereinigt sie ggf. mit den Daten der anderen Threads.
Natürlich kann diese Vorgehensweise nicht immer so eingehalten werden, weil die Aufgaben zu verschieden sind, aber es hat grosse Vorteile wenn man so vorgehen kann.