Einzelnen Beitrag anzeigen

ScharfeMietze

Registriert seit: 5. Mär 2014
165 Beiträge
 
Delphi 10.2 Tokyo Architect
 
#1

Beispiel / Example TThread.CreateAnonymousThread

  Alt 18. Mai 2016, 16:42
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

Geändert von ScharfeMietze (18. Mai 2016 um 17:05 Uhr)
  Mit Zitat antworten Zitat