Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

AW: TThread Controls aktualisieren lassen

  Alt 8. Sep 2010, 10:45
Frame1.Label1 := 'a'; <<< erkennt er nicht Der Grund ist recht einfach. Es kann ja sein das du mehrere Formulare hast und wenn du einfach Frame1.Irgendwas schreibst weiß weder der Compiler noch sonst wer wo sich der Frame befindet (er könnte ja auch auf Form2 liegen).
Daher muss es dann natürlich heißen
Form1.Frame1.Label1 := 'a'; Das funktioniert natürlich nur wenn der Frame auch auf Form1 liegt.

ALLERDINGS solltest du das niemals direkt aus dem Thread heraus machen sondern nur innerhalb einer Methode die du vorher mit Syncronize aufgerufen hast. Ansonsten passiert es ganz schnell das an irgendwelchen unerwarteten Stellen plötzlich Fehler auftreten.
Der Grund dafür ist das die VCL größtenteils nicht Threadsicher ist. Das heißt die Grafikkomponenten auf deinem Formular laufen in einem Thread und wenn du von einem anderen Thread aus direkt darauf zugreifst entstehen "wunderschöne" Fehler. Mit Syncronize innerhalb des Threads erreichst du das der Thread mit dem Formular-Thread (also dem Hauptthread) syncronisiert wird bzw. deine Befehle im Kontext des Hauptthreads ausgeführt werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat