Ich hoffe es ist hier erwünscht.
Nachdem ich mich persönlich immer geärgert habe wenn Formen nicht ansprechbar waren und Threads zu schreiben (für mich) nicht gerade schnell und einfach ist, habe ich nun eine relativ simple Methode gefunden.
Falls ich damit nicht alleine bin, hier mal ein Stück Code der recht einfach aufgebaut ist und unter Seatle entstanden ist.
Ein Memo und eine private StringList um das Ergebnis zu zeigen.
Delphi-Quellcode:
procedure TForm1.SetThreadResultList(ResultList: TStringList);
begin
FThreadResult.Add(ResultList.text);
mmo1.Lines.Add('---ResultList.Text---' + TimeToStr(Now));
mmo1.Lines.Add(ResultList.Text);
mmo1.Lines.Add('---ResultList.Text Ende---'+ TimeToStr(Now));
end;
Und hier der Code um einfach per Thread einen Testordner zu kopieren.
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
LSource,LDestination: string;
begin
LSource:='D:\Test';
Ldestination:= 'C:\Test';
// Anfang des Threads
TThread.CreateAnonymousThread(procedure ()
var
LResultlist: TStringList;
begin
LResultList := TStringList.Create;
try
LResultList.Add('ThreadStart' + TimeToStr(Now)) ;
Tdirectory.Copy(LSource,LDestination); // hier kann LSource und LDestination eingesetzt werden obwohl diese außerhalb des Threads gesetzt wurden.
TThread.Synchronize (TThread.CurrentThread, // nachdem Copy beendet ist geht es hier weiter.
procedure ()
begin
LResultList.Add('ThreadEnd' + TimeToStr(Now)) ;
SetThreadResultList(LResultList);
end);
finally
LResultList.Free;
end;
end).Start;
// Hier ist das Ende des anonymen Threads
end;
Ich hoffe das der Code aufstrebenden Beginnern etwas helfen kann.
Gruß
SM