![]() |
Beispiel / Example TThread.CreateAnonymousThread
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:
Und hier der Code um einfach per Thread einen Testordner zu kopieren.
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;
Delphi-Quellcode:
Ich hoffe das der Code aufstrebenden Beginnern etwas helfen kann.
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; Gruß SM:) |
AW: Beispiel / Example TThread.CreateAnonymousThread
Zitat:
Naja da du den Add vom Memo sofort hinter einander machst, ist da nur die Zeitdifferenz für das Add des Textes. Wofür? Zitat:
Vielleicht auch noch verhindern, dass der Button mehrfach geklickt wird? Wie wäre es mit:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var LSource,LDestination: string; begin Btn1.Enabled := false; LSource:='D:\Test'; Ldestination:= 'C:\Test'; TTask.Run(procedure begin try TThread.Queue(NIL,Procedure begin mmo1.Lines.Add('ThreadStart' + TimeToStr(Now)); end); try Tdirectory.Copy(LSource,LDestination); except TThread.Queue(NIL,Procedure begin mmo1.Lines.Add('Fehler (XY)' + TimeToStr(Now)); // ggf. noch den Fehler mit ausgeben? end); end; TThread.Queue(NIL,Procedure begin mmo1.Lines.Add('ThreadEnde' + TimeToStr(Now)); btn1.Enabled := true; end); end); end; |
AW: Beispiel / Example TThread.CreateAnonymousThread
Natürlich ist das noch (weit) ausbaufähiger. Aber wenn man den Code laufen lässt denke ich zeigt es ganz schön wann es was tut. Wie er mit der Form agiert.
Ich Tat mich bis vor kurzem immer schwer mit Threads und deren Verwaltung. Die Liste ist daher auch nur zur "Demo" Ja das mit der .Quenue ist auch eine feine Sache :) schön das es hier mit steht :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz