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 :

Temporiser une application WINFORM [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut Temporiser une application WINFORM
    Bonjour, je trouve pas comment temporiser une explication


    Exemple (rien a voir avec mon programme)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Var1 = 10;
     
     
    Attendre 45secondes  <= je cherche a faire ceci
     
    Var1 = 11;

    Sous application console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.thread.threading.sleep(45000);
    fonctionne, mais sous winform je sais pas comment m'y prendre, une idée ?

  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ceci fonctionne mais cela bloque la fenêtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Threading.Thread.Sleep(5000);
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Ceci fonctionne mais cela bloque la fenêtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Threading.Thread.Sleep(5000);

    je le sais, mais je ne veux surtour pas bloque la fenetre !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    Si tu dois faire ça c'est peut-être un problème de conception. Quel est ton but ?

    Sinon un Timer ou Stopwatch devrait faire l'affaire !

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    Citation Envoyé par Jaco67 Voir le message
    Salut,

    Si tu dois faire ça c'est peut-être un problème de conception. Quel est ton but ?

    Sinon un Timer ou Stopwatch devrait faire l'affaire !
    Mon programme doit copier /coller un dossier, attendre 40secondes et ensuite copier / coller un autre dossier.


    J'ai recu a copier / coller les dossiers, mais j'arrive pas a temporiser entre les 2 actions.


    Je vais voir le stopwatch, et le timer j'arrive pas a le maitriser :/

  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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par harghan Voir le message
    je le sais, mais je ne veux surtour pas bloque la fenetre !
    Pour ne pas bloquer la fenêtre tu peux déporter tes opérations de copie dans un thread "secondaire", et c'est lui que tu mettras en pause. Ainsi comme la pause ne se fera pas sur le thread principal, ta fenêtre ne sera pas freezée.
    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.

  7. #7
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    Et quel est la technique a applique pour pouvoir faire ca ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Citation Envoyé par harghan Voir le message
    Et quel est la technique a applique pour pouvoir faire ca ?
    Soit en créant un Thread et en le gérant toi même ("compliqué"), soit en passant par un BackgroundWorker.

    Ce composant possède trois événements, DoWork qui est appelé au lancement du BackgroundWorker, ProgressChanged pour envoyer des messages vers le thread UI (depuis DoWork) et RunWorkerCompleted à la fin du travail.

  9. #9
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Ci-joint un lien vers une source exemple que j'ai écrite il y a quelque temps.

    http://dotnet.developpez.com/telecha...ckgroundWorker

    Si tu fais une recherche sur les tutoriels il y en a un également
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  10. #10
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    je n'ai pas acces aux .rar sur mon pc :/ (pas de winrar, et quand je le passe en zip il m'indique que le fichier est emdommagé, et je ne peux pas installer de logiciels...)


    Je vais essayer d'utiliser le Backgroundworker, et chercher des tutos.

  11. #11
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    L'exemple est en WPF, pas en WINFORM mais la technique doit être ma même :

    XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <Window x:Class="TestBackgroundWorker.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Test BackgroundWorker" Height="146" Width="525">
        <Grid Name="grdPrinc">
            <ProgressBar Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="Progress" VerticalAlignment="Top" Width="480" />
            <Button Content="Début" Height="23" HorizontalAlignment="Left" Margin="12,46,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" Click="btnStart_Click" />
            <Button Content="Fin" Height="23" HorizontalAlignment="Left" Margin="93,46,0,0" Name="btnEnd" VerticalAlignment="Top" Width="75" Click="btnEnd_Click" />
            <Label Content="0/0" Height="32" HorizontalAlignment="Right" Margin="0,46,11,0" Name="lblAvancement" VerticalAlignment="Top" Width="133" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" />
            <Label Content="Action en cours : " Height="28" HorizontalAlignment="Left" Margin="12,75,0,0" Name="label1" VerticalAlignment="Top" Width="101" />
            <Label Height="28" HorizontalAlignment="Left" Margin="119,75,0,0" Name="lblAction" VerticalAlignment="Top" Width="372" Content="En attente" />
        </Grid>
    </Window>
    Code Behind

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.ComponentModel;
     
    namespace TestBackgroundWorker
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            private BackgroundWorker work;
            int nMaxValue = 100;
     
            /* MainWindow
             * 
             * Initialisation de la fenêtre
             */
            public MainWindow()
            {
                InitializeComponent();
     
                // Création du BackgroundWorker
                work = new BackgroundWorker();
     
                // Indique la fonction de traitement lors du déclenchement de l'événement DoWork
                work.DoWork += new DoWorkEventHandler(Traitement);
                // Indique la fonction de traitement lors du déclenchement de l'événement indiquant un changement de progression
                work.ProgressChanged += new ProgressChangedEventHandler(work_ProgressChanged);
                // Indique au BackgroundWorker qu'il peut etre interrompu 
                work.WorkerSupportsCancellation = true;
                // Indique au BackgroundWorker qu'il doit traiter l'événement de progression
                work.WorkerReportsProgress = true;
                // Indique la fonction exécutée à la fin du traitement 
                work.RunWorkerCompleted += new RunWorkerCompletedEventHandler(work_RunWorkerCompleted);
     
                // Initialisation de la progressbar
                Progress.Minimum = 0;
                Progress.Maximum = nMaxValue;
                Progress.Value = 0;
     
                btnEnd.IsEnabled = false; 
            }
     
            // Fonction appelée lors du changement de la progression du traitement 
            private void work_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                // Mise à jour de la progress bar
                Progress.Value = e.ProgressPercentage;
     
                // et du label
                lblAvancement.Content = e.ProgressPercentage.ToString() + " / " + Progress.Maximum;
     
                // et le label action
                lblAction.Content = e.UserState.ToString();
     
     
            }
     
            // Fonction de traitement 
            private void Traitement(object data, DoWorkEventArgs e)
            {
                // On vérifie si la fin du traitement a été demandée
                int i = 0;
                while (!work.CancellationPending && i < int.Parse(e.Argument.ToString()))
                {
                    System.Threading.Thread.Sleep(100);
     
                    i++;
     
                    // Indique au BackgroundWorker qu'il y a eu progression avec le pourcentage en paramètre
                    work.ReportProgress(i,"En cours de traitement");
                }
     
                // A la fin du traitement on peut renvoyer un résultat via la propriété result de l'objet DoWorkEventArgs
                e.Result = "Traitement terminé";
            }
     
            // Fonction exécutée lorsque l'événement de fin de traitement est déclenchée
            void work_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                // L'objet RunWorkerCompletedEventArgs peut renvoyer une propriété (Error) contenant une information en cas d'erreur
                if (e.Error != null)
                {
                    MessageBox.Show(e.Error.ToString());
                }
                else
                {
                    // Ou un résultat via la propriété Result
                    lblAction.Content = e.Result.ToString();
                }
                btnStart.IsEnabled = true;
                btnEnd.IsEnabled = false;
     
                Label lbl = new Label();
                lbl.Content = "Je suis la ";
     
                grdPrinc.Children.Add(lbl);
            }
     
            // Bouton Start, lance le BackgroundWorker
            private void btnStart_Click(object sender, RoutedEventArgs e)
            {
                // nMaxValue est un argument pour la fonction de traitement
                work.RunWorkerAsync(nMaxValue);
                btnStart.IsEnabled = false;
                btnEnd.IsEnabled = true;
            }
     
            // Bouton pour annuler le traitement
            private void btnEnd_Click(object sender, RoutedEventArgs e)
            {
                work.CancelAsync();
                btnStart.IsEnabled = true;
                btnEnd.IsEnabled = false;
            }
        }
    }
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  12. #12
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    Alors voila j'ai essayer de placer mon backgroundworker



    Mais etant donnée que mon code est intégralement dans une boucle while (mon programme doit tourner h24 en boucle a copier des dossiers)


    la backgroundworker ne fonctionne pas...
    apres plusieurs heures de recherche sur le net, ca ne me donne rien d'interessant



    une idée afin d'evité le backgroundworker dans le while ou une autre methode ?

  13. #13
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par harghan Voir le message
    une idée afin d'evité le backgroundworker dans le while ou une autre methode ?
    Tu peux utiliser le Gestionnaire des Tâches de Windows ou encore la librairie Quartz.Net qui te permettront de planifier l'exécution de ton programme. Ainsi tu pourras te passer de ta boucle while (si c'est bien elle qui te permet d'avoir une exécution continue).
    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.

  14. #14
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    +1 avec Mat07.

    Surtout que je ne comprend pas bien pourquoi avoir mis le BackGroundWorker dans une boucle ...
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  15. #15
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    Salut,

    le principe de mon logiciel est:


    Simuler un trafic reseaux en lancant des copie / colle de dossier en boucle entre serveur et pc local.


    A la base je l'ai fait en Appli console qui marchait impec,
    Maintenant je doit le faire en graphique pour que la personne puisse choisir :
    l'heure de départ du programme
    l'heure d'arret
    le temps d'arret entre 2 copie (la pause de 45sec par exemple, utilisant un backgroundworker ?)

    un temps d'arret la nuit (pour reprendre a 9heure du matin)



    Donc le backgroundworker se doit d'etre dans une boucle tant que heure d'arret n'est pas atteint, d'ou mon while.




    Pour tout ce qui est installation (quartz ?) je ne peux pas.
    Je suis dans une multinationale, qui requiert l'action d'envoyé un ticket aux US demandant une autorisation d'installation de n'importe quel logiciel, le temps de réponse est de plusieurs jours et je finit mon stage vendredi, une idée ?

  16. #16
    Membre actif
    Inscrit en
    Décembre 2010
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 92
    Par défaut
    Pourquoi ne pas finir l'appli en console ?
    Tu dis que ça marche déjà mais que tu fais de l'ui parce qu'il faut entrer des infos mais ça tu peux le faire via la console.

    Si c'est vraiment urgent c'est vraiment ce que je te conseille.
    Tu auras juste à récupérer les réponses et traiter en fonction.

    Bonne chance

  17. #17
    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 : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par harghan Voir le message
    Donc le backgroundworker se doit d'etre dans une boucle tant que heure d'arret n'est pas atteint, d'ou mon while.
    Pourquoi ne pas splitter ton programme en 2 parties ? L'idée serait une partie pour l'UI, qui sera le "master" (WinForm/WPF...) et une partie en console qui se chargera de simuler le traffic réseau.

    L'utilisateur configure les heures et le temps de pause dans la partie UI. Puis à intervalles réguliers, la partie UI va agir comme un scheduler, et lancer l'appli console qui va simuler le traffic.




    Citation Envoyé par harghan Voir le message
    Pour tout ce qui est installation (quartz ?) je ne peux pas.
    Je suis dans une multinationale, qui requiert l'action d'envoyé un ticket aux US demandant une autorisation d'installation de n'importe quel logiciel, le temps de réponse est de plusieurs jours et je finit mon stage vendredi, une idée ?
    En ce qui concerne Quartz il s'agit juste d'une librairie (DLL) à rajouter dans les références de ton projet. En principe il n'y a rien à installer Et tu as aussi le gestionnaire des tâches de Windows qui est installé nativement.
    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.

  18. #18
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    matt, ton idée de splité le programme m'interesse

    en realité le winform, ca donne des valeur a des variables.


    C'est possible a partir d'un winform de donner des valeurs a une variable et lancer une appli console avec les variables du winform ?

    Je suis preneur, comment on fait ?

  19. #19
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Voir vers quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = l'application à lancée;
    startInfo.Arguments = liste des arguments sous forme de string;
     
    Process.Start(startInfo);
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  20. #20
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Par défaut
    donc je refait l'application console avec des variables vide



    Je fait un winform avec des textbox a remplir avec la valeur des variables, et j'affecte les variables dans le process info pour que la console se lance avec les variables défini par l'utilisateur c'est ca ?

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 28/09/2007, 13h16
  2. Base de données dans une application WinForm
    Par Gat- dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/06/2007, 06h06
  3. Lancement d'une application Winform
    Par farfadet dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 23/05/2007, 11h48
  4. Réponses: 2
    Dernier message: 15/10/2006, 18h01
  5. [C# 1.1] Positionnement d'une application Winform
    Par jordanmaxou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/04/2006, 17h01

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