AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponenten werden in Thread erstellt/Error 1400
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten werden in Thread erstellt/Error 1400

Ein Thema von BillieJoe90 · begonnen am 1. Mai 2007 · letzter Beitrag vom 2. Mai 2007
Antwort Antwort
Benutzerbild von BillieJoe90
BillieJoe90

Registriert seit: 29. Sep 2006
Ort: Bovenden
122 Beiträge
 
#1

Komponenten werden in Thread erstellt/Error 1400

  Alt 1. Mai 2007, 23:13
Hallo,
in einem Thread erstelle ich folgendermaßen Komponenten:
Delphi-Quellcode:
  for i:=0 to length(covers)-1 do begin
    covers[i].chooseImage := TImage.Create(frmDlCover.scbCovers);
    covers[i].chooseRadio := TRadioButton.Create(frmDlCover.scbCovers);
    fileStream := TFileStream.Create('data/tmp' + IntToStr(i) + '.jpg', fmCreate or fmShareDenyWrite);
    frmDlCover.idHttp.Get(covers[i].smallURL,fileStream);
    fileStream.Free;

    covers[i].chooseImage.Picture.LoadFromFile('data/tmp' + IntToStr(i) + '.jpg');

    covers[i].chooseImage.Top := ((row-1)*75)+(row*10);
    covers[i].chooseImage.Left := ((col-1)*75)+(col*10);
    covers[i].chooseRadio.Top := covers[i].chooseImage.Top+76;
    covers[i].chooseRadio.Left := covers[i].chooseImage.Left+32;

    covers[i].chooseImage.Visible := true;
    covers[i].chooseRadio.Visible := true;
    covers[i].chooseImage.Parent := frmDlCover;
    covers[i].chooseRadio.Parent := frmDlCover;
  end;
Durch Ausprobieren habe ich herausgefunden, dass der Fehler "Error 1400. Ungültiges Fensterhandle" beim Schließen des Programmes von den letzten beiden Zeilen (die mit .Parent := ...) ausgelöst wird.

Tja... ich frage mich nun, warum
Irgendwie müssen diese ja bewirken, dass der Thread nicht geschlossen wird?!

Wäre dankbar, wenn mir jemand heöfen könnte

Nutze das Thread-Objekt... (nur so nebenbei)
Johannes
Wenn Sie jetzt gleich bestellen, bekommen Sie ein zweites Set GRATIS!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: Komponenten werden in Thread erstellt/Error 1400

  Alt 2. Mai 2007, 06:15
Die VCL ist nicht thread-Save. Alle GUI-Controls müssen im Hauptthread der Anwendung erzeugt werden und dürfen auch nur dort zugegriffen werden. Diese Thread-Unsicherheit liegt auch darin begründet das die Win32 hier auch nicht Thread-Save ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponenten werden in Thread erstellt/Error 1400

  Alt 2. Mai 2007, 06:30
Hi

Zitat von Bernhard Geyer:
[...] und dürfen auch nur dort zugegriffen werden.
Es ist jedoch möglich, synchronisiert in einem Thread auf die VCL zuzugreifen und das geht mit Delphi-Referenz durchsuchenSynchronize. Dies ist beispielsweise sinnvoll, um den Status einer Berechnung, Datenbankverbindung oder was auch immer im Thread ausgeführt wird, dem Anwender in einem TLabel oder ähnlichem zu übermitteln.

Beispiele hierzu findest du einige in der DP.

Nur ob es sinnvoll ist, Komponenten in einem eigenen Thread zu erstellen, bezweifle ich. Ich würde bei solchen Dingen die Daten, von denen das Erzeugen der Controls abhängt, intern speichern (TList, ...) und dann nach dem Auslesen auf einmal erzeugen.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: Komponenten werden in Thread erstellt/Error 1400

  Alt 2. Mai 2007, 09:03
Zitat von Bernhard Geyer:
Diese Thread-Unsicherheit liegt auch darin begründet das die Win32 hier auch nicht Thread-Save ist.
Warum denn das? Ich verwende Win32 API Controls in mehreren Threads ohne Probs.
Das einzige was man nicht machen darf, ist direkt mit den WindowHandles über Threadgrenzen rumspielen, da diese nur vom Erstellerthread direkt geändert werden dürfen. Sonst gibt es : "Ungültiges Windowhandle"-Fehler.

Sonstige Änderungen, werden eh nur durch SendMessage erwirkt, welches threadsicher ist.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: Komponenten werden in Thread erstellt/Error 1400

  Alt 2. Mai 2007, 09:07
Zitat von Dezipaitor:
Warum denn das? Ich verwende Win32 API Controls in mehreren Threads ohne Probs.
Dann hast du bisher Glück gehabt.

Zitat von Dezipaitor:
Das einzige was man nicht machen darf, ist direkt mit den WindowHandles über Threadgrenzen rumspielen, da diese nur vom Erstellerthread direkt geändert werden dürfen. Sonst gibt es : "Ungültiges Windowhandle"-Fehler.
Und weist du was intern von der VCL Windows-Handle-Relevantes erledigt wird wenn du das Control erzeugst oder die Controls freigegeben werden oder irgendwelche Aktualisierungsevents anliegen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Komponenten werden in Thread erstellt/Error 1400

  Alt 2. Mai 2007, 09:10
Win32 Controls nicht threadfest? Das ist mir neu. Welche denn?
  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 21: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