![]() |
alzaimar workerthread zugriff auf dynam erstellte Komponente
Hi,
ich habe ein Problem mit dem Zugriff auf eine dynamisch erstellte Komponente aus alzaimar workerthread heraus. Pappe ich eine Komponente direkt auf die Form klappt der Zugriff z.B. mit "form1.komponentenname" ohne Probleme - meine dynamisch erstellten Komponenten reagieren aber überhaupt nicht - wo ist hier mein Denkfehler ?
Delphi-Quellcode:
Danke
...
// Auschnitt aus der Hauptform var RT: TDdeServerConv; DDEsymbols: array[1..500] of string; DDElast: array[1..500] of TDDEServerItem; // Last implementation ... // zur laufzeit die komponente erstellen // DDEserver createn RT := TDdeServerConv.Create(Self); RT.Name := 'RT'; // Items createn for i := 1 to 500 do begin DDEsymbol:=DDEsymbols[i]; DDElast[i]:= TDDEServeritem.Create(self); DDElast[i].name:=DDEsymbol+'1'; DDElast[i].ServerConv := RT; end; ... // Ausschnitt aus dem Workerthread Procedure TAddDataJob.AddData; ... Begin ... Entercriticalsection(myCS); //Dieser Zugriff auf eine Komponente auf der Form funktioniert form1.xfeed.lDay:=TD; // Hier ist das Problem - compiliert ohne fehler - aber geht nicht - das ganze in button und es funktioniert DDElast[1].Text:='12345'; // Last <-- was mache ich hier falsch - über form1. läßt es sich nicht ansprechen LeaveCriticalSection(myCS); End; Ralf |
Re: alzaimar workerthread zugriff auf dynam erstellte Kompon
Zitat:
(sowas macht man nicht) Ansonsten sollte es eigentlich keinen Unterschied machen, ob die Komponenten von der VCL oder manuell erstellt werden. Sie müssen aber alle innerhalb des Hauptthreads erstellt werden, da die gekapselten Windows-Komponenten an den Thread gebunden sind, in welchem sie erstellt wurden. |
Re: alzaimar workerthread zugriff auf dynam erstellte Kompon
Hi,
nein die Komponenten werden ganz normal im Hauptprogramm erstellt. Dann wird ein Steuerstring an den workerthread übergeben der einige Berechnungen erledigt und dann die Daten mit der Komponente an ein anderes Programm per DDE übergibt. Mit einer festen Komponente lief der Zugriff über den Workerthread auch ohne Probleme. ich musste nur "form1." davorsetzen aber sobald ich die Komponente dynamisch erstelle funktioniert der Zugriff nicht mehr aus dem Workerthread - aber wie gesagt es kompiliert ohne Probleme. Dynamisch mache ich das, da ich ca. 5000 items benötige. An der Anzahl der itmes sollte es auch nicht liegen, da ich z.B. wenn ich einen Button auf die Form klatsche und den Code von dort ausführe es ohne Probleme funktioniert. Das was mir noch aufgefallen ist, ist dass sich die dynamisch erstellten komponenten nicht über form1. ansprechen lassen die komponente auf der Form schon. Tschüss Ralf |
Re: alzaimar workerthread zugriff auf dynam erstellte Kompon
Es gibt im Job eine Property 'Synchronized'. Die steuert, ob der Job im Kontext des Hauptthreads ausgeführt wird oder nicht. Setze die im Konstruktor des Thread mal auf True und versuch dann, ob alles funktioniert.
Wenn das klappt, kannst Du anfangen, die Dinge, die was mit der VCL zu tun haben, in separate Job-Methoden auszulagern, und die (bei Sychnronized = FALSE) direkt mit Synchronize aufzurufen. Dann wird der Job im Hintergrund ausgeführt, aber das Update der sichtbaren Komponenten im Hauptthread. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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