![]() |
Form wird vom Thread erstellt. Zugriff verweigert! Warum???
Eins der Formulare in meinem Programm wird nicht automatisch beim Start des Programms erzeugt, sondern wenn nötig mit
Delphi-Quellcode:
erstellt und angezeigt wird. Im OnClose-Procedure der Form habe ich
if not Assigned(frmUpdate) then
Application.CreateForm(TfrmUpdate, frmUpdate); frmUpdate.WindowState := wsNormal; frmUpdate.Show;
Delphi-Quellcode:
Diese Form kann mann entweder per Klick auf ein Button auf der Hauptform erstellen und anzeigen oder diese wird von einem Thread automatisch erstellt und erzeugt, wenn der Thread das nötig findet. Wenn die Form durch das Klicken auf den Button erzeugt wird und dann irgendwann wieder geschlossen wird, passiert nicht. Alles in Ordnung. Wenn die Form aber durch den Thread erzeugt wird, erscheint dann beim Schließen der Form die Fehlermeldung "Code 5. Zugriff verweigert". Im Thread steht genau dieselbe Code, die im OnKlick-Procedure des Buttons steht.
Action := caFree;
frmUpdate := nil; Woran liegt das? Wo kommt dieses Fehler her? |
Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum
Hallo romber!
VCL Oberflächenelemente dürfen niemals in einem Thread erzeugt werden sondern immer im VCL Hauptthread. Du musst somit den Constructoraufruf und weitere Zugriffe auf das Formular synchronisieren und somit mit Synchronize eine Methode deines Threads im VCL Mainthread ausführen lassen. Gruss Yellow |
Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum
Danke für die schnelle Antwort!
Zitat:
|
Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum
Hallo romber!
Zitat:
Aber nur nochmal zur Sicherheit: Auch alle späteren Zugriffe auf das Formular von dem Thread aus, werder über einen Synchronize Aufruf synchronisiert? Der Fehlercode 5 ist leider allzu typisch für genau solche Zugriffe, von daher nochmal diese Nachfrage. Wenn ja, dann habe ich auf Anhieb erstmal keine weiteren Vorschläge/Ideen. Gruss, Yellow |
Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum
Danke Yellow!
Deine Beiträge haben mich zur Lösung des Problems gebracht! Ich habe in der Unit der Hauptform eine Procedure erstellt, die die Code zum erzeugen und zeigen der neuen Form enthält. Im Thread synchronisiere ich dann den Aufruf dieser Prozedur. Alles klappt wunderbar! Danke! |
Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum
Hallo romber!
Das ist schön zu hören. Ich habe dazu noch einen kleinen Hinweis: Wenn du für eine oder beiden Methoden keine Parameter übergeben musst vom Thread aus, dann halte im Thread einfach nur das Fensterhandle des Formulars und setze eine selbstdefinierte Nachricht mit PostMessage() ab. Du kannst zwei Integerwerte übergeben als LParam und WParam. Damit hast du keine Wartezeit im Thread durch das synchronize und synchron ist es trotzdem (Synchronize() arbeitet genauso intern). Gruss Yellow |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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-2025 by Thomas Breitkreuz