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 :

Rendre Asynchrone une fonction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Par défaut Rendre Asynchrone une fonction
    Bonjour a tous!
    Merci de m'accorder un peu de votre temps

    J'ai une petite methode qui récupère des tweets sur Twitter en fonction d'un tag particulier.
    J'aimerai rendre cette méthode Asynchrone pour quel ne freeze pas toute mon application.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public static List<Tweet> GetSearchResults(string searchString)
    {
        using (WebClient web = new WebClient())
        {
            //More parameters then this. Most important is the page paramater. You can &page=1 to xxx. 
            //few parameters  in the url :     &rpp=100    for 100answer  |   %23 for hashtag | lang=en  for english msg......
            //  exemple: http://search.twitter.com/search.atom?lang=en&rpp=100&q=%23AnHashTag-filter:retweets
            // -filter:retweets   delete  duplicates
     
            string url = string.Format("http://search.twitter.com/search.atom?lang=en&q=%23{0}", searchString); //HttpUtility.UrlEncode(searchString)
                    WebClient client = new WebClient();
     
            #region AsABrowser
            //Pretend to be Google Chrome
            //Pretending to be a browser instead of an app seems to make twitter respond faster
            client.Headers.Add("Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
            client.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3");
            client.Headers.Add("Accept-Language: en-US,en;q=0.8");
            client.Headers.Add("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16");
            #endregion
            #region TweetFormat
            XDocument doc = XDocument.Load(url);
            XNamespace ns = "http://www.w3.org/2005/Atom";
            List<Tweet> tweets = (from item in doc.Descendants(ns + "entry")
                      select new Tweet
                      {
                         Id = item.Element(ns + "id").Value,
                         Published = DateTime.Parse(item.Element(ns + "published").Value),
                         Title = item.Element(ns + "title").Value,
                         Content = item.Element(ns + "content").Value,
                         Link = (from XElement x in item.Descendants(ns + "link")
                                    where x.Attribute("type").Value == "text/html"
                                    select x.Attribute("href").Value).First(),
                         Image = (from XElement x in item.Descendants(ns + "link")
                                    where x.Attribute("type").Value == "image/png"
                                    select x.Attribute("href").Value).First(),
                         Author = new Author()
                                  {
                                     Name = item.Element(ns + "author").Element(ns + "name").Value,
                                     Uri = item.Element(ns + "author").Element(ns + "uri").Value
                                  }
                    }).ToList();
            return tweets;
            #endregion
         }
    }
    J'ai regardé pas mal d'explication sur le net, mais rien me permettant de récupérer ma list de tweet a la fin.

    Quelqu'un saurait-il m'aider ?

    merci beaucoup

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    Voici un exemple rudimentaire pour créer une telle fonction asynchrone.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void GetSearchResultsAsync(string searchString, Action<List<Tweet>> callback)
    {
        ThreadPool.QueueUserWorkItem((WaitCallback)(o) =>
       {
           var results = GetSearchResults(searchString);
           callback(results);
       });
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Par défaut
    Merci, je ne connaissais pas le ThreadPool.QueueUserWorkItem

    Je vous tiens au courant de mon avancé .

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 10
    Par défaut
    Merci beaucoup DonQuiche

    j'ai résolue mon problème :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     public static void GetSearchResultsAsync(string searchString, Action<List<Tweet>> callback)
            {
                ThreadPool.QueueUserWorkItem((WaitCallback)(o =>
               {
                   var results = GetSearchResults(searchString);
                   callback(results);
               }));
            }

    et dans mon control :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TweetSearch.GetSearchResultsAsync((String)args.NewValue, new Action<List<Tweet>>(delegate(List<Tweet> tweetList)
                         {
                             customControlInstance.Dispatcher.Invoke(new Action(delegate{
                             customControlInstance.m_PartlstTweets.ItemsSource = tweetList;
                             } ));
     
                         }));

    Bonne journée !

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

Discussions similaires

  1. Rendre générique une fonction d'ouverture de formulaire
    Par clickandgo dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/01/2015, 12h03
  2. [PHP asynchrone] Rendre asynchrone une page
    Par neoxen dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2011, 16h24
  3. [VBA-E] - Execution asynchrone d'une fonction
    Par ChtiAuvergnat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2008, 18h31
  4. Rendre Une Fonction Parametrable
    Par khayate dans le forum VB.NET
    Réponses: 9
    Dernier message: 06/06/2007, 14h23
  5. Rendre une fonction generalisable...
    Par Grand Mamamouchi dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/11/2004, 09h04

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