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 :

Probleme d'execution de méthodes [WP7]


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut Probleme d'execution de méthodes [WP7]
    Bonjour a tous,
    Je fais appelle a vous car je rencontre un problème en ce qui concerne l'execution de méthodes. Je vous expose tout d'abord la partie du code qui me pose probleme et j'expliquerai en dessous le probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
      webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
     
     triBulleElement(_listElements);
    Voici le probleme :

    Une fois que je finis de télécharger le fichier XML du flux RSS du figaro j'ai la méthode downloadCompletedFigaro qui s'execute mais le programme n'attend pas que cette méthode se termine, il passe directement à la suite( c'est a dire qu'il execute la méthode triBulleElement). Cela est un probleme car dans la méthode DownloadCompletedFigaro j'ajoute les elements (item) du fichier XML dans une List (_listElement) et au meme moment j'ai la méthode triBulleElement qui utilise cette list pour mettre les items dans l'ordre, toutefois cela me genere une erreur car les elements n'ont pas le temps d'etre ajouté a la liste que déja la méthode triBulleElements veut trier les elements.


    J'aimerai donc savoir si il existe un moyen pour faire en sorte que la méthode triBulleElements se lance une fois que la méthode DownLoadCompeleted et terminé de s'executer

    Merci a tous

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Bonjour, je vais essayer de vous aider, car je débute encore ^^, bref essayez donc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
    webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
    private void downloadCompletedFigaro(object sender, DownloadStringCompletedEventArgs e)
    {
          triBulleElement(_listElements);
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    j'y ai pensé mais je ne peux pas le faire car je n'ai pas que le figaro, j'ai d'autre fichier xml lié a d'autre sites tel que 20 minutes ou le parisien avec leur méthode DonwloadCompleted Respectif

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Enfaite si je peux, mais le probleme qui va se poser c'est que je vais bien trier les elements, mais pas tous les elements car le programe n'aura pas encore mit tout les items dans la List (_listElement), j'en aurai qu'une partie seulement. Je ferai donc un tri sur seulement qu'une partie et non sur la totalité des elements

    une solution pour regler ce probleme ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 37
    Points : 31
    Points
    31
    Par défaut
    Et si une fois que tout a était télécharger tu re tri le tout ?

    il y a peut être mieux, mais vu que je débute je te propose ça tu incrémentes une variable a chaque téléchargement finis et tu fais un test if(downloadTotal == nombreTotalDeTelechargement) tu re tri le tout.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Non, je ne peux pas le faire car je ne connais pas a l'avance le nombre total d'item a telecharger

  7. #7
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    La solution de t'as proposée quentin869 est correcte. Tu as deux solution, soit dans chaque méthode downloadCompleted(Figaro/leparisien...) tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
      webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
     
    webClientFigaro.DownloadStringCompleted += (sender, e) => { triBulleElement(_listElements);}
    ou bien tu utilises une SortedList, comme ça à chaque fois que tu ajoutes un élément, tout reste trié.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    effectivement, j'ai mal interpreter ce qu'il a dit (désolé quentin869).

    Mais j'ai maintenant un autre probleme qui est apparue le voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void telechargement()
    {
    webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
      webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
     
    webClientFigaro.DownloadStringCompleted += (sender, e) => { triBulleElement(_listElements);}
     
     
    listBox.ItemSource = _listElements;
     
    }
    le probleme est que pendant que triBulleElement fait le tri, le programme passe directement à la suite (c'est a dire qu'il ajoute la liste des elements dans ItemSource d'une listeBox et sa malgré le fait que le traitement tri ne soit pas terminé),.
    Ce que souhaite faire c'est faire en sorte que le programme evite de passer a la suite (donc mettre _listElement dans l'ItemSource d'une listbox) tant que je n'ai pas recuperer fini de recuperer la totalité des item et par la meme occasion, tant que le tri n'est pas terminer.

    Je ne vois pas comment je peux faire, j'ai fais des recherches et apparament il fau utiliser un Dispatcher mais je n'ai pas bien compris a quoi cela sert ni comment l'utiliser (si c'est cette classe qu'il faut utiliser pour regler mon probleme)

  9. #9
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void telechargement()
    {
    webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
      webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
     
    webClientFigaro.DownloadStringCompleted += (sender, e) => { triBulleElement(_listElements);
    listBox.ItemSource = _listElements;
    }
     
    }
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    A sisqo60? ca marche mais une fois sur 5 il me lance ceci :

    A first chance exception of type 'System.ArgumentNullException' occurred in System.Windows.dll
    A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll
    Car en faisant comme tu me l'a montré, part moment le programme ajoute la liste _listElements dans listBoxFigaro avant que la fonction DownLoadCompletedFigaro ne soit terminé( et donc avant d'avoir fini d'ajouter les elements dans _listElements) et comme j'ajoute la liste a la listBoxFigaro .. Alors que DownLoadCompleted continue d'ajouter ... ca me genere ce qu'il y a au dessus

  11. #11
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    dernière solution, tu ajoutes le code à la fin de ta méthode downloadCompletedFigaro
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    sa plante egalement toujours pour la meme raison

  13. #13
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    alors là, il faut nous en montrer plus, c'est étonnant ce que tu dis...
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    aide

    oui, voici donc la méthode qui permet de telecharger :

    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
    public void telechargementFlux()
            {
                _listElements = new List<ElementRSS>();
     
                //Une fois les fichiers telechargés, l'evenement DownloadStringCompleted lance la méthode downloadCompleted
                WebClient webClientParisien = new WebClient();
                WebClient webClientFigaro = new WebClient();
     
                webClientParisien.DownloadStringAsync(new Uri("http://rss.leparisien.fr/leparisien/rss/une.xml"));     
                webClientFigaro.DownloadStringAsync(new Uri("http://www.lefigaro.fr/rss/figaro_lefigaromagazine.xml"));
     
                webClientParisien.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedParisien);
     
                webClientFigaro.DownloadStringCompleted += new DownloadStringCompletedEventHandler(downloadCompletedFigaro);
     
                webClientParisien.DownloadStringCompleted += (sender, e) =>
                {
                    triBulleElement(_listElements);
                    //   listBoxEnDirect.ItemsSource = _listElements;
                };
     
                webClientFigaro.DownloadStringCompleted += (sender, e) =>
                {
                    triBulleElement(_listElements);
     
     
                };
     
         listBoxEnDirect.ItemsSource = _listElements; /* c'est ici qu'il y a un probleme. j'aimerai faire en sorte que tout les traitement au dessus soit terminer avant d'affecter _listElements a ItemSource. Ce que ne fais pas le programme, c'est a dire qu'il lance toute les méthode (les downloadCompleted et les tri) et il passe directement a la suite,  cela lance une exception car j'affecte _listElements a ItemSource alors que le programe continue d'ajouter les items a _listElement */
     
     
            }
    et voici les méthodes DownLoadCompeted respectif (je me uniquement celui du figaro car celui du parisien est strictement le meme)

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
      public void downloadCompletedFigaro(object sender, DownloadStringCompletedEventArgs e)
            {
                // Si une erreur s'est produite pendant le téléchargement, on ne renvoit rien
     
                if (e.Error != null) return;
     
     
                // On crée un nouveau document XML
                XDocument xmlDocument = XDocument.Load(new StringReader(e.Result));
                xmlDocument.Element("rss");
                xmlDocument.Element("channel");
     
     
     
                List<ElementRSS> elements = new List<ElementRSS>();
     
                /* On parcours tous les items du fichiers XML et on verifie que 
                   les elements soient présent (title, enclosure et description)
                 */
     
                foreach (var item in xmlDocument.Descendants("item"))
                {
                    ElementRSS element = new ElementRSS();
     
                    try
                    { element.Titre = item.Element("title").Value; }
                    catch (NullReferenceException exception)
                    { element.Titre = ""; }
     
                    try
                    { element.Image = item.Element("enclosure").Attribute("url").Value; }
                    catch (NullReferenceException exception)
                    { element.Image = ""; }
     
                    try
                    { element.Description = item.Element("description").Value; }
                    catch (NullReferenceException exception)
                    { element.Description = ""; }
     
                    try
                    { element.PublicationDate = element.conversionStringToDateTime(item.Element("pubDate").Value); }
                    catch (NullReferenceException exception)
                    {
                        element.PublicationDate = new DateTime();
                        MessageBox.Show("Probleme date");
                    }
     
                    elements.Add(element);
     
                    _listElements.Add(element);
     
     
     
                }
     
                listBoxFigaro.ItemsSource = elements;
     
            }

    Je rappelle le probleme afin d'éviter que vous regardiez plus haut :

    le probleme est que pendant que le programme lance les traitements(DownLoadCompleted, et les tri) le programme passe directement à la suite (c'est a dire qu'il ajoute la liste des elements dans ItemSource d'une listeBox et sa malgré le fait que les traitement ne soit pas terminé),.
    Ce que je souhaite faire c'est faire en sorte que le programme evite de passer a la suite (donc mettre _listElement dans l'ItemSource d'une listbox qui est listeBoxEnDirect) tant qu'il n'a pas fini de recuperer la totalité des item et par la meme occasion, tant que le tri n'est pas terminer.


    Voila, j'espere avoir été explicite.
    Merci a tous

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Tout les traitements sur WP7 sont asynchrones, par conséquent, il faut apprendre à gerer l'asynchronisme avec des mécanismes de synchronisation inter-threads (comme des sémaphores par exemple).

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2010
    Messages : 126
    Points : 69
    Points
    69
    Par défaut
    Merci pour cette information,
    j'ai fais des recherches sur internet pour essayer de le mettre en place, et j'ai vraiment du mal je n'arrive pas a voir comment je peut le mettre en place, j'aimerai savoir si il est possible de faire un petit exemple afin d'illustrer ce que vous venez de dire.

    Merci.

Discussions similaires

  1. [Tomcat][EasyStruts] Problème d'exécution
    Par mmed dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 29/12/2004, 11h55
  2. Probleme d'execution d'une requete avec un Count
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 23/06/2004, 10h33
  3. [Process] Probleme d'execution d'un prog c dans un prog java
    Par Elmilouse dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2004, 14h26
  4. Problème d'exécution
    Par Smaugg dans le forum Linux
    Réponses: 22
    Dernier message: 26/04/2004, 09h34
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

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