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 :

Appeler une méthode (GETHTTP) en mode ASYNCHRONE


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut Appeler une méthode (GETHTTP) en mode ASYNCHRONE
    Bonjour à tous

    J'ai dans mon code une méthode qui s'appelle GetHTTP qui charge une URL (flux RSS). Le problème est que cette méthode s"exécute au même temps que la méthode d'authentification et si la méthode du flux RSS plante alors la connexion au site plante aussi et donc je voudrai faire un appel ASYNCHRONE a la methode GetHTTP

    voila ma méthode :

    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
    20
    21
    22
            public static string GetHTTP(string url)
            {
                try
                {
                    if (!ConfigurationService.Instance.IsInternetActive()) return string.Empty;
                    CustomWebClient c = new CustomWebClient(ConfigurationService.Instance.Session);
                    c.Encoding = Encoding.UTF8;
     
                    string data = c.DownloadString(url);
     
     
     
                    c.Dispose();
                    return data;
                }
                catch (Exception e)
                {
                    PopupNotificationViewModel.ShowPopup(PopupContentType.Erreur, "Impossible de récupérer les données.");
                    Five.FiveControls.SendMailExcpetion.SendCatchExcpetion(e, url);
                    return string.Empty;
                }
            }

    Merci a vous

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En principe rien de bien sorcier avec async/await:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static async Task<string> GetHTTPAsync(string url)
    {
        try
        {
            if (!ConfigurationService.Instance.IsInternetActive()) return string.Empty;
            CustomWebClient c = new CustomWebClient(ConfigurationService.Instance.Session);
            c.Encoding = Encoding.UTF8;
     
            string data = await c.DownloadStringAsync(url);
     
            // le reste de ton code...
        }
    }
    J'ai renommé GetHTTP en GetHTTPAsync car c'est une bonne pratique lorsque une méthode utilise le mot clé async de rajouter le suffixe Async au nom de la méthode...

    Ensuite on modifie légèrement le code pour appeler la méthode asynchrone du WebClient (je suppose ici que ton CustomWebClient dérive de WebClient), et je rajoute await devant.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Bonjour DotNetMatt

    Tout d'abords je te remercie de prendre du temps pour me répondre

    En effet, ta méthode fonctionne très bien......mais dans le FrameWork 4.5 hors que moi je dispose (j'aurais du le préciser dans ma question ) du FrameWork 4 qui ne supporte pas les mots clés "async" et "await" donc as-tu STP une autre idée à cela

    Merci d'avance

  4. #4
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Points : 88
    Points
    88
    Par défaut
    Bonjour katkiller,

    Merci de me répondre, je viens de consulter le lien des précisions que tu m'avais donné, le seul problème et qu'ils disent que ça ne fonctionne pas trop sur VS2010 et que moi justement je suis sur VS2010

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il va peut-être falloir songer à migrer, on arrive très bientôt au Framework 4.6 et à Visual Studio 2015

    Sinon pour répondre à ton cas, il va falloir mettre les mains dans le camboui. Regarde du côté de la TPL (Task Parallel Library) qui permet de gérer des threads sous forme de tâches assez simplement. Voici un lien pour te mettre sur la voie car je n'ai pas le temps de te préparer un truc tout fait : https://msdn.microsoft.com/en-us/lib...v=vs.100).aspx
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. [EJB] Appeler une méthode sur un EJB
    Par c+cool dans le forum Java EE
    Réponses: 12
    Dernier message: 27/01/2006, 11h44
  2. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 14h44
  3. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  4. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15
  5. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55

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