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 :

Barre ou message de progression


Sujet :

C#

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Par défaut Barre ou message de progression
    Bonjour à tous,

    Dans mon programme, j'ai un bouton qui , quand on clic dessus exécute une requete SQL,

    Cependant cette requête dure +-2min.

    Est-ce que c'est possible de mettre une barre de progression ? pour empêcher l'utilisateur a faire un ctrl + alt + delete pensant que sont programme a planté ....


    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    oui..

    tu peux utiliser la backgroundWorker pour faire celà. simple et efficace comme solution....

    Cherche sur le forum ou sur le msdn, les exemples sont multiples et simples à comprendre.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 14
    Par défaut
    Je te conseil de Threader ta méthode (celle qui prend 2 min) en plus d'un ProgressBar. Au moins comme sa ton application ne freezera plus.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Par défaut
    @edenia
    le background worker inclus justement le thread + la progressbar

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Je viens de faire ça il y a peu, voila ce que j'en ai retenu dans un fichier word (une espèce de tuto).

    J'espère pouvoir aider.

    Voir la pièce jointe.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    593
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 593
    Par défaut
    Merci pour vos réponses.

    Je me suis pencher un peu sur le backgroundworker mais je bloque un peu.

    J'ai un bouton et dans ce bouton j’appelle 5 requete SQL, je voudrais mettre chaque requête dans un thread et voir la progression de celle ci.
    Pour commencer j'ai essayé avec une requête SQL dans un thread.
    Je vous met le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void button1_Click(object sender, EventArgs e)
            {
                var mois = comboBox1.SelectedValue.ToString();
                var moisSuivant = int.Parse(mois) + 1;
                var annee = comboBox2.SelectedText.ToString();
     
                backgroundWorker1.RunWorkerAsync((string)mois);
    et ensuite mon Do work :

    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
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                BackgroundWorker worker = sender as BackgroundWorker;
     
                SqlConnection maConnexionSQLsrv;
                SqlCommand myCommand;
                string maRequeteVW;
                SqlDataReader myReaderVW;
                dtVW = new DataTable();
     
     
                //Récupération de la chaine de connexion au serveur de base de données 
                maConnexionSQLsrv = new SqlConnection("server=xxxx;");
     
                maRequeteVW = "SELECT ....
               AND PPTimeStamp >= '2010-" + mois + "-01 00:00:00' and PPTimeStamp < '2010-" + moisSuivant + "-01 00:00:00'" ;
     
                //Création de la commande SQL 
                myCommand = new SqlCommand(maRequeteVW, maConnexionSQLsrv);
                try
                {
                    myCommand.Connection.Open();
                    myCommand.ExecuteNonQuery();
                    myReaderVW = myCommand.ExecuteReader();
                    dataGridView1.DataSource = myReaderVW;
                    dtVW.Load(myReaderVW);
     
                    int OK, AllOK, NbrCollones;
                    double total = 1;
                    double[] Pourcentage = new double[10];
     
                    NbrCollones = dtVW.Rows.Count;
     
                    for (int i = 0; i < NbrCollones; i++)
                    {
                        OK = (int)dtVW.Rows[i].ItemArray[1];
                        AllOK = (int)dtVW.Rows[i].ItemArray[2];
                        Pourcentage[i] = (double)OK / AllOK;
                        Pourcentage[i] = Math.Round(Pourcentage[i], 4); // limite le nombre de chiffre aprés la virgule
                        total = Pourcentage[i] * total;
                    }
     
                    total = Math.Round(total, 4); // limite le nombre de chiffre aprés la virgule
                    total = total * 100; // pour avoir la valeur en pourcentage
     
                    textBox1.Text = total.ToString();
     
                    myCommand.Connection.Close();
                }
                catch (SqlException ex)
                {
                    Console.Write(ex.Message);
                }
            }
    Je bug sur le faite que mon Do Work ne connais pas mes variables mois, moisSuivant et annee.

    Si vous pouvez m'aider. Merci d'avance

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut
    Bonjour
    Dans ton paramètre e de type DoWorkEventArgs tu as la propriété Argument qui te permet d'accéder aux argument que tu as passé au RunWorkerAsync. Il suffit que tu lui passe un objet avec mois, moissuivant.etc.

Discussions similaires

  1. [WD17] Utilisation de la Barre de message
    Par Invité dans le forum WinDev
    Réponses: 1
    Dernier message: 19/12/2012, 17h49
  2. [AC-2007] dégriser barre de messages
    Par lovedesitaliens dans le forum Access
    Réponses: 2
    Dernier message: 16/11/2010, 19h44
  3. [WD11] Affichage barre des messages
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 4
    Dernier message: 25/09/2008, 14h00
  4. barre de telechargement qui progresse au cour de l'execution
    Par soussou80 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 28/04/2008, 17h09
  5. [MFC] Ajouter une barre de message à un CDialog
    Par annedjomo dans le forum MFC
    Réponses: 7
    Dernier message: 09/05/2005, 13h45

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