AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form wird vom Thread erstellt. Zugriff verweigert! Warum???
Thema durchsuchen
Ansicht
Themen-Optionen

Form wird vom Thread erstellt. Zugriff verweigert! Warum???

Ein Thema von romber · begonnen am 3. Jul 2008 · letzter Beitrag vom 3. Jul 2008
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Form wird vom Thread erstellt. Zugriff verweigert! Warum???

  Alt 3. Jul 2008, 13:52
Eins der Formulare in meinem Programm wird nicht automatisch beim Start des Programms erzeugt, sondern wenn nötig mit

Delphi-Quellcode:
if not Assigned(frmUpdate) then
Application.CreateForm(TfrmUpdate, frmUpdate);
frmUpdate.WindowState := wsNormal;
frmUpdate.Show;
erstellt und angezeigt wird. Im OnClose-Procedure der Form habe ich

Delphi-Quellcode:
Action := caFree;
frmUpdate := nil;
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.

Woran liegt das? Wo kommt dieses Fehler her?
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#2

Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum

  Alt 3. Jul 2008, 13:57
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
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum

  Alt 3. Jul 2008, 14:59
Danke für die schnelle Antwort!

Zitat von Yellow579:
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.
Die Code steht im Thread in einer Thread-Procedure, die mit Synchronize() im Execute aufgerufen wird. Wie soll ich es noch mehr synchronisieren?
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#4

Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum

  Alt 3. Jul 2008, 15:52
Hallo romber!

Zitat von romber:
Die Code steht im Thread in einer Thread-Procedure, die mit Synchronize() im Execute aufgerufen wird. Wie soll ich es noch mehr synchronisieren?
Das kam aus deinem Beitrag mir nicht so klar rüber von daher hat sich der Einwand somit erledigt.

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
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum

  Alt 3. Jul 2008, 16:34
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!
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#6

Re: Form wird vom Thread erstellt. Zugriff verweigert! Warum

  Alt 3. Jul 2008, 16:42
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
  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 01:00 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