![]() |
TWebBrowser verursacht Fehler bei Ansteuerung
Hi,
Ich habe z.B. auf "Form 2" einen Webbrowser und möchte diesen Refreshen, wenn auf "Form 1" ein Button geklickt wird.
Delphi-Quellcode:
funktioniert leider aber nicht, denn ich erhalte jedesmal eine Zugriffsverletzung (Lesen von Adresse 00000388).
Form2.Webbrowser.Refresh;
Gleiche Fehler auch, wenn ich den Refresh aus einem Thread ansteuern möchte bzw. generell wenn ich den Browser auf Form 2 ansteuern will. Wieso ist das So? Problem tritt nur mit dem TWebbrowser auf. |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Die Variable "Form2" ist nicht zufällig nil?
Und auf nichtthreadsichere VCL-Komponenten greift man nicht von einem Thread zu. (jedenfalls nicht ohne Synchronize) |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Nein Form2 ist nicht nil und im Thread sicher ich das alles durch CriticalSektion ab.
Ich erstelle Form2 allerdings vorher im Form1 und danach will ich Refreshen lassen. Kann es da zur Kollesion kommen?
Delphi-Quellcode:
So Sieht der Thread aus, dieser ist auch im Form2 gespeichert.procedure TTestThread.Execute; var slText: TStringList; begin slText := TStringList.Create; try CritSektion.Enter; try frm_Test.Browser.Refresh; slText.AddStrings(frm_Test.Browser.HTMLCode); except on E: Exception do Showmessage(E.Message); end; CritSektion.Leave; finally FreeAndNil(slText); end; end; Ist erst einmal nur zum testen gedacht. |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Und woher kennt die VCL deine CriticalSection?
Garnicht, also greifst du dennoch ungesichert darauf zu, denn der VCL-Thread (Hauptthread) kann dennoch gleichzeitig arbeiten. Weder der TWebBrowser noch Showmessage sind threadsicher. |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Zitat:
Delphi-Quellcode:
constructor TTestThread.Create;
Begin inherited create(true); CritSektion := TCriticalSection.create; FreeOnTerminate := True; End; destructor TTestThread.Destroy; begin FreeAndNil(CritSektion); inherited; end; |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Hallo...
ich verstehe das so: 1. Form1 (Mainform) erzeugt Form2 (mit Webbrowser) 2. Aufruf von Form2.Webbrowser.Refresh aus Form1 schlägt fehl. 3. Form1 erzeugt Thread 4. Aufruf von Webbrowser.Refresh aus dem Thread schlägt fehl. soweit korrekt ? |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Zitat:
1 und 2 ist Versuch 1 1 - 3 - 4 ist Versuch 2 Beide Versuche gleiche Ergebnis |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
dann bleiben wir mal bei Versuch 1...
Du mußt 2 Dinge prüfen: - existiert Form2 (erzeugt, automatisch oder manuell) - existiert der Webbrowser (erzeugt, automatisch oder manuell) alles andere ist rumdocktern an den Sympthomen. Bevor die o.g. 2 Punkte nicht klar sind brauchst du nix anderes probieren. |
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Beides ist vorhanden, denn das Fenster ist offen und ich kann den Webbrowser + aufgerufene Seite sehen.
|
AW: TWebBrowser verursacht Fehler bei Ansteuerung
Dann hast du ein wundersames Delphi... stelle mal das Projekt rein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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 by Thomas Breitkreuz