![]() |
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:
und gehe dann in Form1 zurück, von dem ich den Thread aufrufe. Dort sage ich
Edit: TEdit
Delphi-Quellcode:
und dann starte ich den Thread. Ist das so in Ordnung?
MeinThread.Edit:=Form1.Edit1;
|
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.
|
Re: Von Thread aus auf Komponente in Form1 zugreifen
Ok, aber sonst ist es richtig?
|
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.
|
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.
|
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; |
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. |
Re: Von Thread aus auf Komponente in Form1 zugreifen
Gut, da hast du natürlich auch wieder recht. Dann mach ich das so
Danke! |
Re: Von Thread aus auf Komponente in Form1 zugreifen
Zitat:
|
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 10:16 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