![]() |
Komponenten werden in Thread erstellt/Error 1400
Hallo,
in einem Thread erstelle ich folgendermaßen Komponenten:
Delphi-Quellcode:
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.
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; Tja... ich frage mich nun, warum :roll: Irgendwie müssen diese ja bewirken, dass der Thread nicht geschlossen wird?! Wäre dankbar, wenn mir jemand heöfen könnte :pale: Nutze das Thread-Objekt... (nur so nebenbei) |
Re: Komponenten werden in Thread erstellt/Error 1400
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.
|
Re: Komponenten werden in Thread erstellt/Error 1400
Hi
Zitat:
![]() 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. |
Re: Komponenten werden in Thread erstellt/Error 1400
Zitat:
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. |
Re: Komponenten werden in Thread erstellt/Error 1400
Zitat:
Zitat:
|
Re: Komponenten werden in Thread erstellt/Error 1400
Win32 Controls nicht threadfest? Das ist mir neu. Welche denn?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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