![]() |
TForm Controls an TThread übergeben
Morgen,
also ich starte einen TThread aus einen Form z.B. Form1. Nun möchte ich im Thread die Controls z.B. Memo und Edits im TThread nutzen, die zu dem Zeitpunkt ausgefüllt waren. Nutze ich Sie direkt im Thread so:
Delphi-Quellcode:
erhalte ich eine Zugriffsverletzung.
s:= Form1.Edit1.Text;
Ja ich kann diese auch direkt übergeben, im Creator oder per extra Variable, aber ist es so wie in meinem Beispiel nicht möglich? |
AW: TForm Controls an TThread übergeben
Hast du den Hinweistext gesehen/durchgelesen der beim anlegen einer Unit mit TThread in der Unit vorhanden ist?
Es darf auf GUI-Controls nur im dem Thread zugegriffen werden in dem sie erzeugt wurden. Diese Einschränkung liegt daran begründet das alle Windows-Controls eine Thread-Affinität besitzten und nur im erzeugenden Thread gültig sind. Du musst jeden Zugriff auf GUI-Controls mit Synchronize synchronisieren! |
AW: TForm Controls an TThread übergeben
Oh das wusste ich icht, ich dachte bei Ausgaben nur Synchronize benutzen zu müssen, aber auch bei einholen habe ich wohl nicht daran gedacht. Danke
Edit:
Delphi-Quellcode:
funktioniert aber nicht. Falls du das meintest.
s:= Synchronize(frm_Email.MemoNachricht.Lines.Text)
|
AW: TForm Controls an TThread übergeben
Zitat:
Wenn TEdit.Text nur eine Delphi/VCL-Internes property abfragen würde wäre das kein Problem. Zitat:
Delphi-Quellcode:
procedure TMyThread.GetText;
begin FTheText:= Email.MemoNachricht.Lines.Text; end; procedure TMyThread.OtherFunction; begin ... Synchronize(GetText); s := FTheText; ... |
AW: TForm Controls an TThread übergeben
Danke dir. Hab es verstanden.
|
AW: TForm Controls an TThread übergeben
Zitat:
Der Thread kann völlig sicher (und ohne ausgebremst zu werden) auf Informationen zu greifen, die ihm zu Beginn mitgegeben werden. Ausserdem dient das der sauberen Entkopplung von Benutzeroberfläche und Threadlogik. |
AW: TForm Controls an TThread übergeben
Eben, und einem Thread kann man auch Properties und Events spendieren. Man muss nur darauf achten, dass man die Events dann in einer synchronisierten Methode feuert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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