1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut Impossible d'afficher les datas générés par un évenement dans un textbox

    Bonjour à tous, je vous explique mon problème.
    J'ai mis en place un structure évènementielle sur la réception de mes datas. Ainsi, lorsque mes datas sont reçus, mon événement est généré et je veux ensuite traiter ces données reçus et également les afficher dans un textbox. Après quelques tests, le passes bien dans mon événement mais au moment d'écrire dans le textbox, rien ne s'affiche. Avec la console, je constate que tout est bien reçu correctement. Je précise que la fonction d’événement est situé dans mon Form. Avez-vous une idée du problème ?
    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
     
     public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel e)
            {
     
                Console.WriteLine(e.Id.ToString("X") + " " +
                                    e.Data[0].ToString() + " " +
                                    e.Data[1].ToString() + " " +
                                    e.Data[2].ToString() + " " +
                                    e.Data[3].ToString() + " " +
                                    e.Data[4].ToString() + " " +
                                    e.Data[5].ToString() + " " +
                                    e.Data[6].ToString() + " " +
                                    e.Data[7].ToString() + " ");
     
                textBox1.AppendText(e.Id.ToString("X") + " " +
                                    e.Data[0].ToString() + " " +
                                    e.Data[1].ToString() + " " +
                                    e.Data[2].ToString() + " " +
                                    e.Data[3].ToString() + " " +
                                    e.Data[4].ToString() + " " +
                                    e.Data[5].ToString() + " " +
                                    e.Data[6].ToString() + " " +
                                    e.Data[7].ToString() + "\r\n");
                Console.WriteLine(ListReceptionTrame.Count);
           }
    Merci d'avance, pour vos réponses.

  2. #2
    Membre chevronné

    Homme Profil pro
    Responsable déploiement (SCCM, AirWatch, AMP)
    Inscrit en
    juillet 2014
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, AirWatch, AMP)
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 1 055
    Points : 1 942
    Points
    1 942

    Par défaut

    Voir commentaire.

    Code c# : 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
    public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel e)
    {
    string s = e.Id.ToString("X") + " " +
    e.Data[0].ToString() + " " +
    e.Data[1].ToString() + " " +
    e.Data[2].ToString() + " " +
    e.Data[3].ToString() + " " +
    e.Data[4].ToString() + " " +
    e.Data[5].ToString() + " " +
    e.Data[6].ToString() + " " +
    e.Data[7].ToString() + " ";
    // que vaut s ?
     
    Console.WriteLine(e.Id.ToString("X") + " " +
    e.Data[0].ToString() + " " +
    e.Data[1].ToString() + " " +
    e.Data[2].ToString() + " " +
    e.Data[3].ToString() + " " +
    e.Data[4].ToString() + " " +
    e.Data[5].ToString() + " " +
    e.Data[6].ToString() + " " +
    e.Data[7].ToString() + " ");
     
    textBox1.AppendText(e.Id.ToString("X") + " " +
    e.Data[0].ToString() + " " +
    e.Data[1].ToString() + " " +
    e.Data[2].ToString() + " " +
    e.Data[3].ToString() + " " +
    e.Data[4].ToString() + " " +
    e.Data[5].ToString() + " " +
    e.Data[6].ToString() + " " +
    e.Data[7].ToString() + "\r\n");
     
    textBox1.Text = "toto"
    // Est ce qu'il écrit bien toto dans la textbox ?
     
    Console.WriteLine(ListReceptionTrame.Count);
    }

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    1) string s contient bien mes datas.

    2) la textbox affiche rien (ni "toto" ni mes datas)

    J'ai essayé avec un .Refresh(), .Update() sur la textbox, j'ai aussi essayé l'affichage d'un MessageBox et lui affiche bien mes valeurs.
    J'ai aussi essayé de faire un Refresh sur le formulaire au cas où.

    Merci pour ton aide.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 326
    Points : 2 893
    Points
    2 893

    Par défaut

    Citation Envoyé par triv69 Voir le message
    1) string s contient bien mes datas.

    2) la textbox affiche rien (ni "toto" ni mes datas)
    A quelle fréquence reçois-tu les données? Et est-il possible de recevoir des données "vides"?

    Edit: Quoique, il devrait tout de même afficher toto..

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par ZenZiTone Voir le message
    A quelle fréquence reçois-tu les données? Et est-il possible de recevoir des données "vides"?
    A peu près toutes les 50 millisecondes.

    Il est impossible de recevoir des données vides. C'est la condition de lever d'évènement.

  6. #6
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 528
    Points : 1 530
    Points
    1 530

    Par défaut

    Winform? Wpf ?
    Est-ce que tu es bien dans le thread de l'UI ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    Je suis dans un Windows Form.

    J'ai créé un Thread de réception de datas en dehors de mon Form.
    J'ai aussi créé un évènement qui s'exécute à chaque réception de datas. Celui-ci envoi les datas au form qui doit les afficher dans une textbox.

    J'ai l'impression que je ne peux pas communiquer avec mes composants du Form dans la fonction Fonction_ReceptionTrame.

    J'ai créé une checkbox qui est sensé passé à Checked = true lorsqu'il y a un appel de l'évènement sauf qu'elle n'est jamais cochée.

  8. #8
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 528
    Points : 1 530
    Points
    1 530

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par nnovic Voir le message
    Merci pour la réponse.
    Cependant je ne souhaite pas faire de multithreading, d'où le fait que j'utilise un thread afin de réceptionner mes datas et un système d'évènement pour faire remonter mes informations à mon formulaire.

    Après plusieurs tests, j'ai l'impression que tout ce qui se passe dans la fonction Fonction_ReceptionTrame, est complètement indépendant du reste du code du Formulaire.
    Lorsque je fais une modification sur une variable du Form, celle-ci est prise en compte dans ma fonction mais pas dans le reste de mon code.

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 326
    Points : 2 893
    Points
    2 893

    Par défaut

    Regarde ce que ça peut donner avec un "Invoke" (tu trouveras de la doc sur le net). Après ça m'étonnerait que ce soit ça, une exception aurait été générée..

  11. #11
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 528
    Points : 1 530
    Points
    1 530

    Par défaut

    Citation Envoyé par triv69 Voir le message
    Cependant je ne souhaite pas faire de multithreading, d'où le fait que j'utilise un thread afin de réceptionner mes datas et un système d'évènement pour faire remonter mes informations à mon formulaire.
    Mais l'interface graphique possède son propre Thread. Donc tu fais du multithreading, même si tu ne le sais pas!

  12. #12
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par nnovic Voir le message
    Mais l'interface graphique possède son propre Thread. Donc tu fais du multithreading, même si tu ne le sais pas!
    Ce logiciel serait un logiciel d'endurance. L'objectif est d'avoir un minimum de Thread.
    Effectivement je me suis mal exprimé, il y a un multithreading mais je veux juste ne pas avoir 46 thread qui tourne en même temps.
    Il y a aussi un aspect de curiosité dans la passation d'information par un système d'évènement.
    L'objectif n'est pas de remplacer le code par un Thread mais de déboguer l'affichage des informations.

    Si vous avez un exemple d'affichage sur une textbox à partir d'un système d'évènement, je suis preneur.

    Merci encore pour votre aide !

  13. #13
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 528
    Points : 1 530
    Points
    1 530

    Par défaut

    As-tu essayé Invoke, comme on te le suggère ?

  14. #14
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    J'ai essayé en créant un nouveau thread simplement pour test. Ça a fonctionné, le textbox est bien mise à jour. En revanche, je ne veux pas créer un nouveau thread juste pour cela et j'aimerai savoir comment implémenter le "invoke" dans une structure événementielle tel que celle que j'ai aujourd'hui ?

    Merci par avance.

  15. #15
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 374
    Points : 4 689
    Points
    4 689
    Billets dans le blog
    5

    Par défaut

    Citation Envoyé par triv69 Voir le message
    Cependant je ne souhaite pas faire de multithreading, d'où le fait que j'utilise un thread afin de réceptionner mes datas et un système d'évènement pour faire remonter mes informations à mon formulaire.

    Après plusieurs tests, j'ai l'impression que tout ce qui se passe dans la fonction Fonction_ReceptionTrame, est complètement indépendant du reste du code du Formulaire.
    Lorsque je fais une modification sur une variable du Form, celle-ci est prise en compte dans ma fonction mais pas dans le reste de mon code.
    Le gestionnaire d'événement lève une exception. Tu es dans un cas où cela se fait en silence. Pour t'en convaincre, il te suffit de rajouter un bloc try/catch et de regarder l'exception que tu reçois (normalement, un InvalidOperationException dans ton cas, lié à un accès inter-thread non autorisé).

    Ensuite, ce n'est pas parce que tu utilises des événements que par magie ton code s'exécute sur le bon thread. Un événement s'exécute sur le thread qui le déclenche. Donc quand tu appelles ton événement pour gérer les données reçues, il s'exécute sur le thread qui reçoit les données, et non sur le thread UI, d'où l'impossibilité de mettre à jour directement le TextBox.

    Pour y parvenir, tu dois utiliser le patron d'invocation. Microsoft a fait un très bon article à ce sujet, [URL="https://msdn.microsoft.com/fr-fr/library/ms171728(v=vs.110).aspx"]disponible sur la MSDN/URL]
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  16. #16
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    J'ai suivi vos conseils en utilisant un thread safe. Voici mon code mais malheureusement, toujours rien sur mon textbox. Si vous avez une piste...
    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
     
    delegate void SetTextCallback(string text);
     
            private void SetText(string text)
            {
                // InvokeRequired required compares the thread ID of the
                // calling thread to the thread ID of the creating thread.
                // If these threads are different, it returns true.
                if (this.textBox1.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText);
                    this.Invoke(d, new object[] { text });
                }
                else
                {
                    this.textBox1.Text = text;
                }
            }
     
            private void ThreadProcSafe()
            {
                this.SetText("Ca fonctionne");
            }
     
            public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel Acq)
            {
                 Console.WriteLine(Acq.Id.ToString("X") + " " +
                                    Acq.Data[0].ToString() + " " +
                                    Acq.Data[1].ToString() + " " +
                                    Acq.Data[2].ToString() + " " +
                                    Acq.Data[3].ToString() + " " +
                                    Acq.Data[4].ToString() + " " +
                                    Acq.Data[5].ToString() + " " +
                                    Acq.Data[6].ToString() + " " +
                                    Acq.Data[7].ToString() + " ");
     
                this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
     
                this.demoThread.Start();

  17. #17
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 374
    Points : 4 689
    Points
    4 689
    Billets dans le blog
    5

    Par défaut

    La comme ça, je ne vois pas d'erreur. Peux-tu confirmer que l'interface graphique répond pendant la réception des données (possibilité d'interagir avec ta fenetre. Si tu as des boutons peux-tu cliquer dessus ? Peux-tu déplacer la fenêtre ? etc...)
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  18. #18
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    mars 2009
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 528
    Points : 1 530
    Points
    1 530

    Par défaut

    Mais pourquoi faire un truc si compliqué ????
    Pourquoi ne pas juste appeler Invoke ou BeginInvoke directement depuis Fonction_ReceptionTrame ????

  19. #19
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 374
    Points : 4 689
    Points
    4 689
    Billets dans le blog
    5

    Par défaut

    Citation Envoyé par nnovic Voir le message
    Mais pourquoi faire un truc si compliqué ????
    Pourquoi ne pas juste appeler Invoke ou BeginInvoke directement depuis Fonction_ReceptionTrame ????
    Je me permets de donner mon avis

    Pour moi, cette version "compliquée" est une bonne méthode à suivre. Comme son nom l'indique, Fonction_ReceptionTrame a pout but de réceptionner la trame. Donc elle a pour objectif de récupérer les données, éventuellement les transformer pour ensuite en faire quelque chose (ici, les afficher). La fonction demande donc a afficher les données (et c'est amplement suffisant). Si elle devait en plus gérer "comment" afficher les données, on commencerait à avoir un code difficile à maintenir, car au sein d'une même fonction on ferait :
    • réception des données ;
    • transformation des données ;
    • affichage (appel direct à l'UI, donc très dépendant de l'implémentation).


    Comme on dit souvent : une fonction = une fonctionnalité.

    De plus, le patron d'invocation est un patron bien connu et bien répandu avec les Winform. Cela facilite donc d'autant plus la maintenance à long terme de l'utiliser. Et ce n'est pas parce qu'il y a plus de code que c'est plus compliqué. C'est un précepte faux.
    .
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  20. #20
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 18
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par François DORIN Voir le message
    La comme ça, je ne vois pas d'erreur. Peux-tu confirmer que l'interface graphique répond pendant la réception des données (possibilité d'interagir avec ta fenetre. Si tu as des boutons peux-tu cliquer dessus ? Peux-tu déplacer la fenêtre ? etc...)
    Oui, on peut toujours interagir avec l'interface graphique pendnt la réception des données (clique sur bouton, coche checkbox...) donc ma Form est toujours active et non bloqué... Je ne vois vraiment pas d'où vient le problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Continuum] Afficher les rapports générés par les plugins maven
    Par dferot dans le forum Intégration Continue
    Réponses: 4
    Dernier message: 14/11/2007, 16h25
  2. comment ne pas afficher les donnees transmis par un lien
    Par coucam dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/07/2007, 14h39
  3. Réponses: 4
    Dernier message: 01/03/2007, 14h24
  4. [img201.imageshack.us] impossible d'afficher les images
    Par Blossom dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 07/02/2007, 08h41
  5. Réponses: 2
    Dernier message: 11/12/2006, 14h14

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