Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Von Thread aus auf Komponente in Form1 zugreifen (https://www.delphipraxis.net/88506-von-thread-aus-auf-komponente-form1-zugreifen.html)

TheMiller 16. Mär 2007 13:16


Von Thread aus auf Komponente in Form1 zugreifen
 
Hallo,

ich habe einen Thread in einer separarten Unit, weil ich ihn öfter benötige. Jetzt möchte ich von dem Thread aus, bzw von einer procedure aus dem Thread auf eine Komponente, zB eine Edit-Komponente, auf Form1 zugreifen. Das klappt auch soweit, nur ich frage mich, ob es von der Form bzw. Stil korrekt ist.

Ich deklariere in der Unit des Threads eine Variable im Public-Teil

Delphi-Quellcode:
Edit: TEdit
und gehe dann in Form1 zurück, von dem ich den Thread aufrufe. Dort sage ich

Delphi-Quellcode:
MeinThread.Edit:=Form1.Edit1;
und dann starte ich den Thread. Ist das so in Ordnung?

SirThornberry 16. Mär 2007 13:20

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
anstelle von Form1.Edit solltest du Self.Edit nehmen wenn die Zuweisung innerhalb von TForm1 statt findet.

TheMiller 16. Mär 2007 13:21

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
Ok, aber sonst ist es richtig?

Bernhard Geyer 16. Mär 2007 13:21

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
Wenn du den Zugriffs nicht synchronisierst und etwas macht was sich GUI-Technisch auswirkt wird es früher oder später krachen, da die VCL nicht Thread-Save ist.

SirThornberry 16. Mär 2007 13:22

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
ich finde es so richtiger/besser als aus der Threadklasse auf eine globale Variable (Form1) zu zugreifen. So ist das ganze Objectorientiert und man kann mehrere TForm1 erzeugen welche mit Threads interagieren ohne das sich die Instanzen behagen.

TheMiller 16. Mär 2007 13:26

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
Wenn ich Synchronize verwende, hängt das Programm während dem Zugriff. hab's so gemnacht

Delphi-Quellcode:
procedure MyThread.Machwasmitlistview;
var
  i: Integer;
begin
  for i:=0 to 1000 do
  begin
    lv.Items.Add;
    lv.Items.Item[lv.Items.Count-1].Caption:=IntToStr(i);
    lv.Repaint;
  end;
end;

procedure MyThread.Execute;
begin
  Synchronize(Machwasmitlistview);
end;

Anwendung

MyThread.Lv:=Self.Listview;
MyThread.Resume;

SirThornberry 16. Mär 2007 13:29

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
für so etwas ist ein Thread ungeeignet. Wenn du die ganze Zeit etwas an der Oberfläche machst gehört das in den Thread zu dem die Oberfläche gehört (Hauptthread). Ein Thread macht in deinem Fall also nur Sinn wenn irgendwelche Berechnungen zu machen sind und nur ab und an eine Ausgabe (die dann natürlich syncronisiert) erfolgt.
Verwende in deinem Fall lieber "BeginUpdate" und "EndUpdate" um das ganze zu beschleunigen.

TheMiller 16. Mär 2007 13:36

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
Gut, da hast du natürlich auch wieder recht. Dann mach ich das so

Danke!

xZise 16. Mär 2007 13:48

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
Zitat:

Zitat von SirThornberry
Verwende in deinem Fall lieber "BeginUpdate" und "EndUpdate" um das ganze zu beschleunigen.

Und das .Repaint? Wird das im Begin/EndUpdate ausgeführt?

SirThornberry 16. Mär 2007 13:58

Re: Von Thread aus auf Komponente in Form1 zugreifen
 
das Repaint macht dann gar keinen sinn mehr weil das befüllen soooo schnell geht :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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