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# Threads] Remplir listbox


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut [C# Threads] Remplir listbox
    Hello,

    J'ai un programme assez simple et j'aimerais qu'il note plus ou moins ce qu'il fait dans une listbox. Le problème, c'est que j'ai certaines action à noter qui se font depius des fonctions "principales", et d'autres dans des threads. J'ai créé un simple fonction pour pouvoir l'appeler depuis "partout" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void debug(string text)
    {
         this.lst_debug.Items.Add(DateTime.Now + " : " + text);
    }
    Le problème, comme vous le voyez venir, c'est que depuis les threads il ne m'autorise pas a ajouter des éléments dans la listbox et m'affiche un joli blabla comme quoi l'interthread c'est mal.

    Y-a-t'il un moyen de corriger cela ???

    Merci d'avance

    PoZZyX

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Appeler un délégué via la méthode Invoke afin de donner la main au thread principal de la fenêtre.

    Si tu ne vois pas de quoi je parle, n'hésite pas.

  3. #3
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    je suis un peu un programmeur du dimanche en c#, enfin un bidouilleur (du moins pour le moment). Effectivement je ne comprend pas trop ta réponse, ça doit venir de ma façon d'apprendre le c# par des essais

    En tout cas merci pour ta rapidité de réaction

  4. #4
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    En voyant un de tes tuto je suis passé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    delegate void ajoute_ligne(string text);
    ajoute_ligne debug = delegate(string text)
    {
         this.lst_debug.Items.Add(DateTime.Now + " : " + text);
    };
    Bon je sais pas si le principe est juste mais avec ça le problème c'est qu'il ne m'autorise plus le this. et je ne sais pas comment atteindre ma listbox

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Ah tu as trouvé tout seul

    Apparement, y a une erreur dans la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ajoute_ligne debug = delegate(string text)
    {
         this.lst_debug.Items.Add(DateTime.Now + " : " + text);
    };
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ajoute_ligne(string text)
    {
         this.lst_debug.Items.Add(DateTime.Now + " : " + text);
    };

  6. #6
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    lol la je vois plus du tout, je dois mettre ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    delegate void ajoute_ligne(string text);
    void ajoute_ligne(string text)
    {
          this.lst_debug.Items.Add(DateTime.Now + " : " + text);
    };
    et ça me fait une erreur.

    ou je dois enlever la ligne delegate et ça revient au problème initial.

    je sais je dois etre casse pieds mais je comprend pas :S

    merci de ton aide

  7. #7
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Non, tu dois laisser la ligne délégué évidemment.
    J'ai juste corrigé la méthode ajoute_ligne. D'ailleurs il y a encore une erreur, il faut retirer le ; après l'accolade de cette méthode en question.

  8. #8
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    et après j'appelle la méthode normalement ou avec un Invoke ?

  9. #9
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Avec Invoke.

    Un truc comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Invoke(new Ajout_Ligne(AjoutLigne), "ton argument");
    Par contre, je remarque que le nom de ton délégué est le même que le nom de ta méthode, c'est compile?

  10. #10
    Membre éclairé Avatar de PoZZyX
    Inscrit en
    Août 2005
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 426
    Par défaut
    Non effectivement ça ne compilait pas, mais maintenant tout fonctionne parfaitement.

    Merci bcp pour letemps que tu as passé a m'aider !!!

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

Discussions similaires

  1. comment remplir listbox
    Par sihame23 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/07/2008, 15h42
  2. Remplir Listbox au démarrage
    Par Petit Ecolier dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/08/2007, 09h24
  3. remplir listbox bdd
    Par lesafir dans le forum ASP.NET
    Réponses: 8
    Dernier message: 21/06/2007, 17h23
  4. Remplir listbox sur base d'une autre listbox
    Par jujujulien dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/05/2007, 08h46
  5. pb remplir Listbox dynamique
    Par maniolo dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/08/2006, 18h50

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