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

Windows Forms Discussion :

[c#] winform Refresh()


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut [c#] winform Refresh()
    Bonjour,

    je cherche à actualiser l'affichage de ma winForm :
    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
     
     Cursor.Current = Cursors.WaitCursor;
     
                try
                {
                    using(ClientTcp client = new ClientTcp())
                    {
     
                        client.Connect(_serverScanIp, _serverScanPort);
                        client.sendTerminalId();
                        labelItem.Text = (client.CallTraitement(comm.commConst.MSG_TraitItem)) ? "OK" : "";
                        this.Refresh();
                        labelSalesLines.Text = (client.CallTraitement(comm.commConst.MSG_TraitSalesLine)) ? "OK" : "";
                        this.Refresh();
                        labelSalesHeaders.Text = (client.CallTraitement(comm.commConst.MSG_TraitSalesHeader)) ? "OK" : "";
                        this.Refresh();
                        labelSalesPackaging.Text = (client.CallTraitement(comm.commConst.MSG_TraitSalesPackagingDetail)) ? "OK" : "";
                        this.Refresh();
                        labelCleanUp.Text = (client.CallTraitement(comm.commConst.MSG_TraitCleanUp)) ? "OK" : "";
                        client.DisConnect();
                    }
                    labelTraitementTermine.Text = "TRAITEMENT TERMINE";
                }
                catch (Exception ex)
                {
                    log.Log(ex);
                    MessageBox.Show("(Server scan) : " + ex.Message);
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
    Avec ou sans le Refresh(), l'affichage ne se rafraichit qu'une seule fois à la fin.
    Je souhaite qu'il se rafraichisse après chaque appel de la fonction "CallTraitement()"

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est parce que tu exécutes ce traitement sur le thread de l'interface graphique, celui-ci est donc trop occupé pour redessiner l'interface.

    Le mieux, c'est que tu fasses le traitement dans un nouveau thread. Par contre il faut utiliser Invoke pour mettre à jour l'interface graphique à partir du thread :

    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
     
            void buttonRefresh(object sender, EventArgs e)
            {
                new Thread(RefreshData).Start();
            }
     
            void RefreshData()
            {
     
                Invoke(() => Cursor.Current = Cursors.WaitCursor);
     
                try
                {
                    using(ClientTcp client = new ClientTcp())
                    {
     
                        client.Connect(_serverScanIp, _serverScanPort);
                        client.sendTerminalId();
     
                        string text = (client.CallTraitement(comm.commConst.MSG_TraitItem)) ? "OK" : "";
                        Invoke(() => labelItem.Text = text);
     
                        text = (client.CallTraitement(comm.commConst.MSG_TraitSalesLine)) ? "OK" : "";
                        Invoke(() => labelSalesLines.Text = text);
     
                        text = (client.CallTraitement(comm.commConst.MSG_TraitSalesHeader)) ? "OK" : "";
                        Invoke(() => labelSalesHeaders.Text = text);
     
                        text = (client.CallTraitement(comm.commConst.MSG_TraitSalesPackagingDetail)) ? "OK" : "";
                        Invoke(() => labelSalesPackaging.Text = text);
     
                        text = (client.CallTraitement(comm.commConst.MSG_TraitCleanUp)) ? "OK" : "";
                        Invoke(() => labelCleanUp.Text = text);
                        client.DisConnect();
                    }
                    Invoke(() => labelTraitementTermine.Text = "TRAITEMENT TERMINE");
                }
                catch (Exception ex)
                {
                    log.Log(ex);
                    Invoke(() => MessageBox.Show("(Server scan) : " + ex.Message));
                }
                finally
                {
                    Invoke(() => Cursor.Current = Cursors.Default);
                }
            }
     
            // Pour faciliter l'utilisation avec des expressions lambda
            void Invoke(Action action)
            {
                Invoke((Delegate)action);
            }

  3. #3
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Merci !
    Çà marche nickel !

    Ps : me permet de comprendre un peu mieux les threads et l'utilisation de "Action".

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/01/2009, 13h11
  2. Refresh
    Par bluevelvet dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/04/2004, 13h20
  3. Probleme de Refresh avec TQuery et DBGrid
    Par insoo dans le forum C++Builder
    Réponses: 7
    Dernier message: 25/11/2003, 17h20
  4. Réponses: 2
    Dernier message: 23/12/2002, 20h34
  5. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38

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