Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème WebBrowser (Windows Forms)

Sujet résolu
    31 octobre 2022 à 14:07:52

    Je suis actuellement en train de développer un programme avec une interface graphique Windows Forms à laquelle j'ai intégré Google Maps avec un composant WebBrower. J'ai une base de données qui contient plusieurs lieux (adresse, ville etc...) et je veux recupérer leurs coordonnées GPS et générer un itinéraire (via l'API gratuite Maps URL). Pour cela je passe une URL au WebBrowser et charge tous les lieux à tour de role (WebBrowser.Navigate(url)) car lorsqu'un lieu est chargé Google Maps génère une nouvelle URL qui contient ses coordonnées GPS. Pour cela j'utilise l'évènement navigated qui se déclenche quand le WebBrowser a Navigué vers un nouveau document et si l’URL du document contient les coordonnées alors je charge l'URL du lieu suivant. La méthode que j'ai décrite marche avec un dizaine de lieux, mais lorsque la liste compte plus d'une dizaine de lieux, le programme crash de manière aléatoire (parfois après avoir chargé 12 lieux, parfois 20...) en laissant ce genre de  message : Le programme s'est arrêté avec le code -1073741819 (0xc0000005) 'Access violation'.

    Je n'ai pas d'indication plus précise quant à l'origine de l'erreur.

            private void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)//évènement déclenché quand le webBrowser a chargé l'url
            {
                if (browser.Url.ToString().Contains("@"))//Google Maps va générer plusieurs URL avant de charger le lieu, si elle contient @ alors il y a les coordonnées
                {
                    tabCoord.Add(browser.Url.ToString().Split('@')[1].Split(',')[0] + "|" + browser.Url.ToString().Split('@')[1].Split(',')[1]);
                    browser.Navigate("https://www.google.com/maps/search/?api=1&query=" + (Tab2[0, nosite].Replace(" ", "+")).Replace("'", "+").Replace("|", "+") + separator + (Tab2[1, nosite].Replace(" ", "+")).Replace("'", "+").Replace("|", "+"));
                }
            }

    Auriez vous un idée de l'origine du problème et comment y remédier ?

    Merci d'avance pour vos réponses.


    • Partager sur Facebook
    • Partager sur Twitter
      1 novembre 2022 à 18:16:15

      >le code -1073741819 (0xc0000005) 'Access violation'.

      Cela indique que le programme a voulu accéder à une adresse mémoire qui n'a pas été "réservée".

      C'est une chose assez difficile/compliqué à faire quand on ne fait que du .NET standard, car il y a le garbage-collector qui sert normalement d'intermédiaire.

      Le plus probable, c'est une mauvaise utilisation d'une API non managée qui n'est pas blindé ou d'un bug dans un des composants non managés utilisés.

      En utilisant un débogueur et éventuellement en configurant correctement le serveur de sources/symbole, vous devriez avoir plus d'information sur la cause du problème.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        3 novembre 2022 à 9:24:56

        Il se trouve que WebBrowser utilise le navigateur Edge, j'ai donc utilisé à la place ChromiumWebBrowser du wrapper CefSharp qui utilise Chromium et ça a réglé le problème, je peux maintenant envoyer une centaine de requêtes sans problème.
        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2022 à 11:38:22

          je crois plutôt que WebBrowser utilise Internet Explorer.

          Edge et chrome utilisent tous deux chromium comme moteur web.
          Pour Edge, il y a le composant WebView2 https://learn.microsoft.com/fr-fr/microsoft-edge/webview2/ 

          • Partager sur Facebook
          • Partager sur Twitter

          Problème WebBrowser (Windows Forms)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown