Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Anwendung von Synchronize in TThread (https://www.delphipraxis.net/169539-anwendung-von-synchronize-tthread.html)

simmi 27. Jul 2012 12:36

Anwendung von Synchronize in TThread
 
Hallo,

ich möchte aus einem TThread auf dem, auf dem Hauptformular befindlichen progressbar ein progressbar1.StepIt ausführen. Leider komme ich mit der Syntax nicht zurecht.:oops:

Ich versuche
Delphi-Quellcode:
MyThread.Synchronize(progressbar1.StepIt);

Irgendetwas fehlt da. Habe damit noch nie gearbeitet und die gefundenen Beträge sind auf diese sicher simpele Angelegenheit nicht eingegangen.

himitsu 27. Jul 2012 12:45

AW: Anwendung von Synchronize in TThread
 
Delphi-Quellcode:
{LokalerNamespace.}Synchronize({LokalerNamespace.}progressbar1.StepIt);

MyThread.xxx ?
Du bist doch schon im Thread (hoffentlich in einer Methode der Threadklasse), dann solltest du niemals soeine externe gloable Variable verwenden, sondern immer nur Self (was man auch weglassen könnte).



Tja, du bist im Thread, also suchst du progressbar1 auch in der Threadklasse, womit es natürlich selbstverständlich ist, daß diese dort nicht gefunden wird. :zwinker:

> einfach: Man gehe über die globale Form-Variable.

> ordentlich: du übergibst z.B. im Constructor dem Thread die Form-Referenz, bzw. eigentlich besser eine DoProgressStep-Callback-Methode, welche sich der Thread speichert und über die du dann threadintern gehst.

Luckie 27. Jul 2012 12:54

AW: Anwendung von Synchronize in TThread
 
Die einfache Möglichkeit:
Delphi-Quellcode:
uses
  Unit3;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Thread: TBeispiel;
begin
  Thread := TBeispiel.Create(True);
  Thread.FreeOnTerminate := True;
  Thread.Resume;
end;

procedure TForm1.Update;
begin
  ProgressBar1.StepIt;
end;
Delphi-Quellcode:
implementation

uses Unit1;

{ TBeispiel }

procedure TBeispiel.Execute;
var
  i: Integer;
begin
  for i := 0 to 9 do
  begin
    Update;
    sleep(1000);
  end;
end;

procedure TBeispiel.Update;
begin
  Synchronize(Form1.Update)
end;

simmi 27. Jul 2012 13:06

AW: Anwendung von Synchronize in TThread
 
Danke für die schnelle Hilfe, komme jetzt zurecht:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz