IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

webclient vs webBrowser


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Points : 29
    Points
    29
    Par défaut webclient vs webBrowser
    Bonjour,

    Avec un webBrowser, j'arrive à charger la page d'un site avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monwebBrowser.Navigate(new Uri(adresse));
    while (monwebBrowser.ReadyState != WebBrowserReadyState.Complete)		
    	Application.DoEvents();
    string webContenu = monwebBrowser.DocumentText;
    Mais j'aimerais intégrer le chargement d'une page web dans une classe, pas dans l'application : ça me parait meilleur du point de vue objet pour la classe en question.

    Mon problème, c'est que le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WebClient client = new WebClient();
     Uri uri = new Uri(adresse);
    string htmlCode;
    client.DownloadString(htmlCode);
    ne charge pas toute la page, et je n'arrive pas à reproduire le comportement du webBrowser, pour attendre que toute la page soit chargée, avant de continuer.

    Quelqu'un aurait-il une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    WebClient client = new WebClient();
     
    Uri uri = new Uri(adresse);
    client.DownloadStringCompleted += client_DownloadStringCompleted;
    client.DownloadStringAsync (uri);
    passe la compile, mais je ne vois pas comment récupérer le résultat du chargement de la page dans une string.

    Merci par avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Sais-tu seulement lister les événements d'un contrôle ???

    Exemple pour le contrôle Form en mode concepteur de vues :

    Nom : nPpB4.png
Affichages : 248
Taille : 13,3 Ko

    Voilà l'évènement qui devrait t'aider pour ton WebBrowser : DocumentCompleted

    Se produit lorsque le contrôle WebBrowser finit de charger un document.
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Et merci pour ton aide.
    Comme je le mentionne plus haut, l'utilisation du web Browser ne pose pas de problème.

    Les 3 lignes du 1é code marchent.

    Ce que je cherche à faire, c'est garder la fonctionnalité "chargement d'une page" dans une classe.
    Donc m'affranchir du webBrowser.

    Un objet webclient me paraissait mieux adapté.
    Ce n'est peut-être pas optimum, il y a peut-être d'autres objets C# qui ça font mieux, mais un webclient doit sûrement pouvoir dire au code : "tu fais une pause tant que je n'ai pas fini mon job", pour avoir un chargement complet d'une page, comme le font les 3 lignes de code que j'ai posté pour le web browser. ou alors me trompe-je ?

    Voilou.

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WebClient client = new WebClient();
    Uri uri = new Uri(adresse);
    string htmlCode = client.DownloadString(uri);
    Ou éventuellement comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    WebClient client = new WebClient();
    Uri uri = new Uri(adresse);
    Task t = client.DownloadStringTaskAsync(uri);
    try
    {
      int timeout = 30000; // 30 secondes
      t.Wait(timeout);
      if(t.Status != TaskStatus.RanToCompletion) throw t.Exception;
      string htmlCode = t.Result;
      Console.WriteLine(htmlCode);
    }
    catch(AggregateException ex)
    {
      ex.InnerExceptions.ForEach(e => Console.WriteLine(e.Message));
    }
    catch(Exception ex)
    {
      Console.WriteLine(ex.Message);
    }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta réponse.

    En fait, je ne voyais pas qu'on pouvait utiliser une variable webTruc dans une méthode d'un objet MonObjet.

    Je partais dans l'idée (erronée) de devoir utiliser le webBrowser de mon appli, et c'était pas génial.

    Je suis en train d'utiliser une classe dérivée de Monobjet, qui a un webBrowser dans ses attributs, et qui ira chercher sur le web ce qu'elle a besoin pour faire vivre MonObjet.

    Tout est indépendant de l'appli, et ça me parait plus joli.

Discussions similaires

  1. Pour utiliser htmlDocument: webBrowser vs webclient
    Par Petite_Escalope dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/06/2007, 03h35
  2. Attendre la fin du chargement de la page dans un WebBrowser
    Par core1 dans le forum Web & réseau
    Réponses: 5
    Dernier message: 15/06/2003, 04h12
  3. Empécher la sélection du texte des pages dans un WebBrowser
    Par DevelOpeR13 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/06/2003, 18h36
  4. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17
  5. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo