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#] Thread et Treeview


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut [C#] Thread et Treeview
    Bonjour à tous,

    Voilà, mon application réalise un traitement de fichier assez conséquent. Je crée donc un thread qui réalise ce traitement afin que l'utilisateur puisse l'interrompre quand il le souhaite... A la fin de mon traitement, un autre thread est lancé qui gère l'affichage de mon appli (résultat du traitement, fichiers créés...tout le bazar...). Le problème provient du fait (ca en a l'air en tout cas...) que mon thread d'affichage manipule un treeview, ce qui provoque un tout beau plantage...

    Quelqu'un aurait-il une solution autre que "bah utilise une listbox", qui entre nous est une solution qui marche mais me déplait profondément...

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    hum



    un peu plus de details?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    En fait, une InvalidOperationException est générée avec un message me disant que l'action sur mon control TreeView a été appelée du mauvais Thread...Puis il me dit que je dois utiliser Control.Invoke...

    Suis un peu perdu...
    [/img]

  4. #4
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Ah

    Je crois que j'ai deja eu ca. Pour contourner le pb, cree un treenode root sur lequel tu vas travailler. A la fin de ton traitement seulement: rajoute ce node a ton treeview

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Ok, mais ca veut dire que mon application doit détecter la fin du traitement pour ensuite ajouter le TreeNode. Hors c'est ce que j'ai voulu éviter en créant un Thread d'affichage qui lui attend un évènement (généré à la fin du traitement fichier) pour afficher le résultat. Tout cela, pour que mon application puisse réagir à l'éventuelle annulation du traitement par l'utilisateur...

  6. #6
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Tu peux passer la reference du treeview dans ton thread (et n'y ajouter le treenode root, avec tous ses childs qu'a la fin du traitement)

    ca marche chez moi

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Dans ce cas, c'est nickel...un tout tout grand merci...

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    un petit tag Résolu :

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    j'ai exactement le même problème ... mais je n'arrive pas à trouver la solution !!
    Vous entendez quoi exactement par treenode root ???

  10. #10
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    En fait tu cree un treenode dans le vent, sans qu'il soit attache au treeview, tu fais ton traitement dessus (en lui ajoutant une hierarche de sous-nodes, en utilisant un thread ou pas)

    Une fois ce node construit, tu l'ajoute au treeview (il est le root, cad le premier node de la hierarchie)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Je comprens pas, j'ai essayé pourtant
    Je ne dois pas bien gérer mon thread. Ce qui me surprend, c'est quand remplacant le treenode par un string pas de problème pour lire mon string !!!

    Voici mon code, si tu pouvais y jeter un oeil
    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
     
        Public Class MonThread
     
            Private _thread As Thread
            Private _isCancelled As Boolean = False
            Private _paused As New ManualResetEvent(False)
     
            Public myNodes As New TreeNode
     
            Public myTreeView As TreeView
     
            Public Sub New(ByVal cnxBase() As Base.cnxBaseAccess, ByVal iniTreeView As TreeView)
                 myTreeView = iniTreeView 
            End Sub
     
            Public Sub SpinUp()
                _thread = New Thread(AddressOf start)
                _thread.Name = "Load Treeview"
                _thread.Start()
     
            End Sub
     
            Protected Sub start()
                Me.myNodes.Nodes.Add(New TreeNode("toto"))
                Me.myTreeView.Nodes.Add(Me.myNodes)
            End Sub
     
        End Class

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    J'ai l'impression que treenode n'est pas thread-safe ! !

    Car si je passe un treeview, je n'ai plus le message d'erreur " mauvais Thread ..." mais en regardant avec un espion express, le tableau nodes a bien une cellule mais avec rien dedans !!! :-(

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Voici la solution :
    http://samples.gotdotnet.com/quickstart/howto/doc/WinForms/WinFormsThreadMarshalling.aspx

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    Je remets ce sujet au goût du jour en l'appliquant à ma situation car j'ai un peu de mal à résoudre ce problème.

    J'ai une form ouverte avec dedans un treeview représentant des groupes et des personnes.

    Parallèlement, j'utilise un thread pour exécuter une procédure qui importe des salariés (faisons simple)
    à la fin de cet import (tjs dans la procédure), je lance le rafraichissement des fenêtres (et donc notamment de celle décrite ci dessus) --> plantage dans la reconstruction du treeview (même message d'erreur que décrit au début du post)

    Voici des extraits de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Import_demo = new Thread(new ThreadStart(Importer_DEMO));
    Import_demo.Name = "Thread1"; 
    Import_demo.Start();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void	Importer_DEMO()
    {
    Import_Salaries();
    Import_Contrat();
    //demande de rafraichissement des fenêtres	
    //en particulier, déclenche un Set_TVGroupe...
    this.Incremente_Label_Count_Refresh(this._lRefresh_Demo);
    }
    Voila...
    Merci de votre aide...

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

Discussions similaires

  1. Treeview et Thread
    Par crocteamgg dans le forum C#
    Réponses: 13
    Dernier message: 30/01/2013, 19h51
  2. Mise à jour TreeView à partir de différents thread
    Par 1234567890 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/07/2009, 10h40
  3. Remplir une treeview dans un nouveau thread
    Par vaxxx dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/12/2008, 15h44
  4. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 09/01/2007, 13h00
  5. [C#] Thread et treeviews
    Par bart64 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 08/11/2006, 21h06

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