Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TWebbrowser im Thread benutzen (https://www.delphipraxis.net/177845-twebbrowser-im-thread-benutzen.html)

youuu 30. Nov 2013 20:46

TWebbrowser im Thread benutzen
 
Hi ich habe ich riesen Problem.
Ich habe auf der Form 8 Browser.

Nun starte ich verschiedene Threads, jedem wird ein Browser zugewiese.
Dieser soll nun eine Webadresse anwählen. (Klappt alles)

Nun aber das Problem, wenn ich von dieser Adresse mit den Sourcecode geben lassen möchte erhalte ich einen Fehler.
Und zwar "Access violation at address 632D533D in module 'MSHTML.dll' Read of address 00000008"

sx2008 30. Nov 2013 23:37

AW: TWebbrowser im Thread benutzen
 
Was hast du überhaupt vor dass du mehrere Threads in Verbindung mit TWebBrowser verwendest?
TWebBrowser ist ein visuelles Control und da die VCL nicht threadsicher ist kannst du dir somit jede Menge Probleme einhandeln.

Frage: benötigen deine Webabrufe die Unterstützung von JavaScript?
Falls nicht könntest du mit dem ActiveX-Objekt IXMLHTTPRequest oder Indy besser zurechtkommen.

Bernhard Geyer 30. Nov 2013 23:59

AW: TWebbrowser im Thread benutzen
 
Zitat:

Zitat von sx2008 (Beitrag 1238037)
Was hast du überhaupt vor dass du mehrere Threads in Verbindung mit TWebBrowser verwendest?
TWebBrowser ist ein visuelles Control und da die VCL nicht threadsicher ist kannst du dir somit jede Menge Probleme einhandeln.

Primär liegt die fehlende Thread-Sicherheit daran das alle GDI-Objekte Thread-Affin sind und nur im erzeugenden Thread verwendet werden dürfen. Und die Absturzstelle (MSHTML.dll) deutet darauf hin das hier (ausnahmsweise) die VCL unschuldig ist.

youuu 1. Dez 2013 10:56

AW: TWebbrowser im Thread benutzen
 
Den Webbrowser Zugriff sicher ich immer mit einer TCriticalSection ab.
Ich kann zwar auch Indy verwenden, aber ich möchte die Zugriffe gerne visual darstellen, daher der Webbrowser.

Ich wunder mich halt wieso die MSHTML.dll rummeckert und wie ich das beheben kann.

Bernhard Geyer 1. Dez 2013 11:07

AW: TWebbrowser im Thread benutzen
 
Zitat:

Zitat von youuu (Beitrag 1238061)
Den Webbrowser Zugriff sicher ich immer mit einer TCriticalSection ab.

Wird hier nix nützen.

Zitat:

Zitat von youuu (Beitrag 1238061)
Ich kann zwar auch Indy verwenden, aber ich möchte die Zugriffe gerne visual darstellen, daher der Webbrowser.

Wie gesagt. Wird nicht gehen da das von der Win-API und der VCL nicht vorgesehen ist.
Da musst du schon mehr Aufwand investieren um es ähnlich wie moderne Browser machen. Diese starten für jedes Fenster einen eigenen Prozess und blenden diesen dann auf das Fenster des Hauptprozesses ein.

youuu 1. Dez 2013 11:10

AW: TWebbrowser im Thread benutzen
 
Hmm wie soll das funktionieren?
Gibt es dafür ein Tutorial?

Bernhard Geyer 1. Dez 2013 11:15

AW: TWebbrowser im Thread benutzen
 
Zitat:

Zitat von youuu (Beitrag 1238064)
Hmm wie soll das funktionieren?

Google bzw. such hier im Forum nach "fremde anwendung fenster"

Zitat:

Zitat von youuu (Beitrag 1238064)
Gibt es dafür ein Tutorial?

Glaube ich nicht. Die Anforderung ist zu speziell.



Aber wieso überhaupt Threads.
Einfach nacheinander alle 8 TWebBrowser mit navigate ansteuern. Diese werden schon versuchen möglichst parallel die Seiten zu laden.

youuu 1. Dez 2013 11:21

AW: TWebbrowser im Thread benutzen
 
Weil ich gerade an Threads übe und das direkt damit verbinden wollte, um zu lernen.

Bernhard Geyer 1. Dez 2013 11:28

AW: TWebbrowser im Thread benutzen
 
Zitat:

Zitat von youuu (Beitrag 1238068)
Weil ich gerade an Threads übe und das direkt damit verbinden wollte, um zu lernen.

Zum lernen ist das zu Kompliziert da hier zu viele andere Faktoren (Thread-Affinität, Netzwerk, OLE/ActiveX) mitspielen.
Nimm was einfacheres

himitsu 1. Dez 2013 11:44

AW: TWebbrowser im Thread benutzen
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1238063)
Zitat:

Zitat von youuu (Beitrag 1238061)
Den Webbrowser Zugriff sicher ich immer mit einer TCriticalSection ab.

Wird hier nix nützen.

Jupp, denn damit kannst du nur deine eigenen Zugriffe absichern, aber wenn du eh nur von je einem Threead zugreifen wolltest, wäre das ja schon abgesichert.

Nur was ist mit den restlichen Zugriffen, welche nciht von dir sind?
z.B. vom Windows, wenn es das Ding neu zeichnet oder auf deine Eingaben reagiert


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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