Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Seltsamer Fehler mit PageControl und Thread (https://www.delphipraxis.net/101418-seltsamer-fehler-mit-pagecontrol-und-thread.html)

xtZ 12. Okt 2007 20:35


Seltsamer Fehler mit PageControl und Thread
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Wie kann es sein, dass immer, wenn ich mit einem Thread auf ein Control in einem inaktiven TabSheet, dass noch nicht in den Vordergrund gerufen wurde, zugreife, das Control verschwindet und beim Beenden des Programms einige Fehlermeldungen bekomme, jedoch wenn das Control bzw. das TabSheet schon einmal sichtbar, also im Vordergrund war, alles funktioniert? :roteyes:

Habe zwecks besserer Verständnis nochmal ein Beispiel im Anhang.
Dazu einfach mal auf den Button klicken, ohne das erste TabSheet in den Vordergrund gebracht zu haben.

Hoffe irgendjemand hat das verstanden und kann mir erklären, wieso das so ist.

Danke :!:

Bernhard Geyer 12. Okt 2007 21:05

Re: Seltsamer Fehler mit PageControl und Thread
 
Es ist einfach nicht erlaubt unsynchronisiert von einem Thread auf GUI-Controls zuzugreifen. Das kracht einfach unspezifiziert.

xtZ 12. Okt 2007 21:08

Re: Seltsamer Fehler mit PageControl und Thread
 
Zitat:

Zitat von Bernhard Geyer
Es ist einfach nicht erlaubt unsynchronisiert von einem Thread auf GUI-Controls zuzugreifen. Das kracht einfach unspezifiziert.

Ja, aber wenn man das Control einmal sichtbar gemacht hat, funktioniert es ja.
Wie kann man denn synchronisiert mit BeginThread arbeiten?

Bernhard Geyer 12. Okt 2007 21:16

Re: Seltsamer Fehler mit PageControl und Thread
 
Zitat:

Zitat von xtZ
Ja, aber wenn man das Control einmal sichtbar gemacht hat, funktioniert es ja.

Es funktioniert zufälliger weise.

Zitat:

Zitat von xtZ
Wie kann man denn synchronisiert mit BeginThread arbeiten?

Ich wüsste es wenn du die TThread-Klasse verwenden würdest. Dort gibt es die Methode Synchronize. Schau doch mal im VCL-Code was dort gemacht wird.

xtZ 12. Okt 2007 21:25

Re: Seltsamer Fehler mit PageControl und Thread
 
Zitat:

Zitat von Bernhard Geyer
Ich wüsste es wenn du die TThread-Klasse verwenden würdest. Dort gibt es die Methode Synchronize. Schau doch mal im VCL-Code was dort gemacht wird.

Ja, das hätte ich auch gewusst, aber ich dachte, dass es sowas ähnliches auch für BeginThread gibt, weil ich mir für sowas nicht extra ein TThread anlegen möchte. Gibt es sonst nicht irgendwie die Möglichkeit ein Event an die Form oder so zu senden, sodass nicht der Thread, sondern die Form auf das Control zugreift? :gruebel:
In der Code-Library habe ich leider nichts passendes gefunden.

Danke!

Apollonius 12. Okt 2007 21:39

Re: Seltsamer Fehler mit PageControl und Thread
 
Deiner Phantasie sind keine Grenzen gesetzt! Eine globale Boolean-Variable sollte es zum Beispiel tun, wenn du sie im Hauptthread mit einem Timer abfragst. Sei aber allgemein vorsichtig, wenn du in mehreren Threads auf Variablen zugreifst. Das geht in diesem speziellen Fall aber noch.

oki 12. Okt 2007 21:50

Re: Seltsamer Fehler mit PageControl und Thread
 
Hi,

also ich empfehle dir TThread und Syncronize, so wie es Bernhard schon gesagt hat.

Gruß oki

xtZ 12. Okt 2007 22:07

Re: Seltsamer Fehler mit PageControl und Thread
 
OK, dann werde ich es so machen. Thx

dominikkv 12. Okt 2007 22:21

Re: Seltsamer Fehler mit PageControl und Thread
 
vllt mit CriticalSections?

DGL-luke 12. Okt 2007 22:21

Re: Seltsamer Fehler mit PageControl und Thread
 
Synchronize funktioniert über WIndows Messages. Es wird an den Hauptthread eine Nachricht geschickt, mit der Bitte, die entsprechenden Prozedur in seinem Kontext auszuführen. Das kann man natürlich nachbilden...


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