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 :

Affichage temps réel [Débutant]


Sujet :

C#

  1. #1
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut Affichage temps réel
    Salut tout le monde

    J'ai crée une application Windows Forms.
    Quel élément graphique dois-je utiliser pour faire des affichage en temps réel.
    Par exemple avec des listbox ça attend la fin des traitements pour afficher le résultat.

    Merci de votre aide

  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
    Citation Envoyé par rockley Voir le message
    Quel élément graphique dois-je utiliser pour faire des affichage en temps réel.
    Par exemple avec des listbox ça attend la fin des traitements pour afficher le résultat.
    Précise un peu ce que tu fais... quel traitement ? Je suppose que tu récupères des données directement dans le thread de l'UI ? Si tu fais ça, l'affichage ne peut pas se rafraichir tant que le traitement n'est pas fini, puisque le thread UI est occupé. Il faut donc faire ton traitement dans un autre thread

  3. #3
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Ce sont des lectures de BDD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int i = 0; i < 1000; ++i)
    {
    	dr.Read();
    	int numDossie = (new formatageLigneSql(dr)).get_NUMDOSSIE();
     
    	if (numDossieEtude != null)
    	{ listBox1.Items.Add(numDossie); }
    	else { listBox1.Items.Add("NULL"); }
     
    	listBox1.Items.Add("");
    }
    Je suis obligé d'attendre la fin de l'execution de mon boucle for pour que l'affichage soit exécuté.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Comme dit plus haut, utiliser un thread secondaire.

    L'autre possibilité est d'utiliser le contrôle ListView qui possède un mode dit "virtuel" permettant d'appeler la lecture des données au fur et à mesure du scrolling.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


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

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Avant tout merci de m'avoir mis sur la piste.

    J'ai un peux galéré, car j'étais dans mon FORM.
    Et les thread et les Form ne s'aiment pas trop.(On ne peut pas interagir sur les Form à partir d'autre Thread).

    Je met l'erreur pour ceux qui aurons le même problème.
    Opération inter-threads non valide : le contrôle 'listBox1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
    Je suis parvenu à le résoudre en passant par les invoke.

    Voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            private delegate void ThreadWriteDelegateHandler(Object wri);
            private ThreadWriteDelegateHandler ThreadWriteDelegate;
     
            private void ThreadProcess(Object wri)
            {
                ThreadWriteDelegate = new ThreadWriteDelegateHandler(ThreadWrite);
                this.Invoke(this.ThreadWriteDelegate, new object[] { ((String)wri) });
            }
     
            public void ThreadWrite(Object wri)
            {
                listBox1.Items.Add(wri);
            }
    Et voila mon appelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                Thread t = new Thread(new ParameterizedThreadStart(ThreadProcess));
                t.Start("toto");
    Donc beaucoup de code pour faire juste un
    listBox1.Items.Add(wri);
    en ''asynchrone''.



    Mais je ne suis pas au bout de mes peine.
    Comment je peux faire pour faire plusieurs appelles sans tuer et recréer mes Thread ?

    Par exemple
    t.Start("toto");
    t.Start("toto");
    t.Start("toto");
    ne marche pas.

  6. #6
    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
    D'abord, pour le Invoke tu as une solution plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Invoke(new Action(() => listBox1.Items.Add("toto")));
    Et tu n'as pas besoin de lancer un nouveau thread qui va juste faire un Invoke sur le thread de l'UI... tu peux appeler Invoke à partir de ton thread de traitement.

    Par contre Invoke est bloquant, autrement dit ton traitement sera interrompu jusqu'à ce que l'appel avec Invoke se termine. Ce n'est pas forcément gênant (à voir selon les cas), mais si ça te pose un problème tu peux utiliser BeginInvoke à la place, qui est non-bloquant.

  7. #7
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Merci pour votre aide à tous.

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

Discussions similaires

  1. [AJAX] Comment faire => resultat de mysql en affichage temps réel
    Par noellepere dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/09/2007, 09h55
  2. Affichage temps-réel d'une séquence d'image
    Par Copros dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 30/05/2007, 15h13
  3. [AJAX] Affichage temps réel.
    Par AMS78 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/01/2007, 20h38
  4. Architecture: ré-affichage temps réel
    Par SGJ dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 20/06/2006, 13h51
  5. Réponses: 19
    Dernier message: 20/12/2005, 10h03

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