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.DownloadStringAsync freeze mon appli


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut WebClient.DownloadStringAsync freeze mon appli
    Bonjour,

    J'utilise la class WebClient pour effectuer des requête HTML.

    Et à ma grande surprise, l'appel de la méthode DownloadStringAsync freeze mon appli pendant plus de 10sec avant que le job soit fait sans problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Client_DownloadStringCompleted);
    Console.WriteLine("START async !" + DateTime.Now.ToLongTimeString());
    Client.DownloadStringAsync(Uri);
    Console.WriteLine("      ->     " + DateTime.Now.ToLongTimeString());
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    START async !22:57:17
          ->     22:57:30

    En cherchant un peu, j'ai remarqué que c'est uniquement le premier appel à cette méthode qui freeze mon appli ?

    Donc du coup, en ce qui me concerne le problème n'est pas trop grave, mais est-ce normal ? Comment un appel sensé être asynchrone puisse bloquer ainsi mon appli ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je viens de tester, chez moi ça bloque pas... A quel endroit fais-tu l'appel à DownloadStringAsync ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    Je code en C#/WPF, .NET4, et utilise le pattern View/ViewModel

    Donc dans ma vue, j'ai un bouton qui lève une commande lorsqu'il est clické, Cette commande est intercepté par mon viewmodel qui construit l'objet WebClient ainsi que la requête qui va bien.

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    La fonction DownloadStringAsync() est exécutée dans le même thread, le temps que la requête soit créée et envoyée au serveur. Si, pour une raison quelconque (proxy,...) cette requête mets du temps, c'est normal que ça bloque.

    Essaye un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Task.Factory.StartNew(() =>
    {
        Client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Client_DownloadStringCompleted);
        Client.DownloadStringAsync(Uri);
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 69
    Points
    69
    Par défaut
    Effectivement on n'y voit que du feu maintenant ... ça prend toujours autant de temps, mais ça freeze pas l'appli.

    Enfin bon, devoir créer un thread à part pour appeler une méthode soit disant asynchrone c'est la loose .

    Dixit MSDN :
    These methods do not block the calling thread.
    Merci Equinox et tomlev

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] mon appli bloque le reboot du PC
    Par Nacros dans le forum Windows Forms
    Réponses: 13
    Dernier message: 15/08/2006, 13h38
  2. Drag&Drop sur l'icone de mon appli
    Par Laskar dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2004, 15h53
  3. Réponses: 7
    Dernier message: 04/06/2004, 15h20
  4. Réponses: 4
    Dernier message: 16/08/2003, 13h21
  5. Comment être sure que mon appli prenne le focus ?
    Par AmaX dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/12/2002, 15h00

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