AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Von Thread aus auf Komponente in Form1 zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Von Thread aus auf Komponente in Form1 zugreifen

Ein Thema von TheMiller · begonnen am 16. Mär 2007 · letzter Beitrag vom 16. Mär 2007
Antwort Antwort
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:16
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

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

MeinThread.Edit:=Form1.Edit1; und dann starte ich den Thread. Ist das so in Ordnung?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:20
anstelle von Form1.Edit solltest du Self.Edit nehmen wenn die Zuweisung innerhalb von TForm1 statt findet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:21
Ok, aber sonst ist es richtig?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:21
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:22
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:26
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;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:29
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#8

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:36
Gut, da hast du natürlich auch wieder recht. Dann mach ich das so

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:48
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?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Von Thread aus auf Komponente in Form1 zugreifen

  Alt 16. Mär 2007, 13:58
das Repaint macht dann gar keinen sinn mehr weil das befüllen soooo schnell geht
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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