Also ich würde alle nötigen Objekte, die die Thread-Klasse braucht im Hauptthread erzeugen. (Stichwort:
Dependency Injection)
Die Objekte haben also zunächst mal keinen Inhalt.
Damit hat man die Freiheit, die Objekte im Hauptthread oder im Thread selbst zu laden.
Dann muss man sich darüber klar werden wem die Objekte gehören; also wer der "Owner" ist.
Mal angenommen, eine Thread-Klasse benötigt ein Artikel-Objekt und eine Datenbank-Connection.
Die Datenbank-Connection ist sicher ein sehr langlebiges Objekt; es wird also dem Thread nur einfach so mitgegeben.
Das Artikel-Objekt dagegen wird kurzfristig im Hauptthread erzeugt und dem Thread übergeben.
Damit geht auch die Verantwortung das Artikel-Objekt freizugeben an das Thread-Objekt über.
Delphi-Quellcode:
procedure TMainForm.StartNewArtikelThread(artikelnummer:string);
var
meinThread : TMeinThread;
artikel : TArtikel;
begin
artikel := TArtikel.create;
artikel.ArtikelID := artikelnummer;
// hier könnte man das Objekt laden oder man überlässt das dem Thread
// artikel.LoadFromDataSet(QryArtikel);
meinThread := TMeinThread.Create(True);
meinThread.DBConnection := DataModuleMain.DBConnection;
meinThread.Artikel := artikel; // meinThread muss Artikel freigeben
meinThread.Logger := FFileLogger;
meinThread.Resume;
end;