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#] Problème d'utilisation des delegate - création contrôle dynamique


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [C#] Problème d'utilisation des delegate - création contrôle dynamique
    Bonjour à tous.

    Voici mon problème.

    Dans mon application, j'ai un treeview qui représente les dossiers d'un lecteur du disque.
    Sur chaque noeud checké de ce treeview, je rajoute un FileSystemWatcher qui écoute la création de nouveaux dossiers.

    Lorsqu'un nouveau dossier est crééer, je veux rajouter un noeud à mon treeView.

    Après avoir eu le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    L'action effectuée sur ce controle est appelée*à partir d'un thread incorrect. Vous devez marshaler le thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour effectuer cette action
    J'ai fait ceci:

    la déclaration de mon délégué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    private delegate void process(TreeNode tn, TreeNode nodeToAdd, string key);

    L'évenement qui se déclenche sur création dans un répertoire écouté
    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
     
            void f_Created(object sender, FileSystemEventArgs e)
            {
                try
                {
                    FileAttributes flagAttr = File.GetAttributes(e.FullPath);
                    if ((flagAttr & FileAttributes.Directory) == FileAttributes.Directory)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Name = e.FullPath;
                        tn.Text = e.Name;
                        tn.Checked = true;
                        try
                        {
     
                            string fatherNodeName = La propriété name de mon noeud père;
                            process p = new process(AddNodeToFatherNode);
                            p.Invoke(TREEVIEW.Nodes[_machine], tn, fatherNodeName);
                        }
                        catch(Exception e1){new Error().Write(e1);}
                    }
                    else
                    {
                        MessageBox.Show("Fichier créé");
                    }
                }
                catch (Exception e0) { new Error().Write(e0); }
            }

    La fonction qui doit rechercher mon noeud père et lui ajouté le noeud qui correspond au nouveau dossier créé
    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
     
     
            public void AddNodeToFatherNode(TreeNode tn, TreeNode nodeToAdd, string key)
            {
                foreach (TreeNode t in tn.Nodes)
                {
                    if (t.FullPath.CompareTo(key) == 0)
                    {
                        t.Nodes.Add(nodeToAdd);
                    }
                    else
                    {
                        AddNodeToFatherNode(t, nodeToAdd, key);
                    }
                }
            }


    mais j'ai toujours l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    L'action effectuée sur ce controle est appelée à partir d'un thread incorrect. Vous devez marshaler le thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour effectuer cette action

    pourquoi ??? Qu'est ce qui ne va pas

    merci pour votre aide !!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    J'ai résolu mon problème !

    Je ne sai spas pourquoi mais en utilisant la méthode beginInvoke plutôt que invoke, ça fonctionne.
    j'ai cru lire qu'il fallait utiliser cela lors de la création dynamique de contrôles.

    Ainsi, il fallait faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    IAsyncResult res = BeginInvoke(new process(AddNodeToFatherNode), new Object[] { TREEVIEW.Nodes[_machine], tn, fatherNodeName });
     
    EndInvoke(res);
    Merci les tutoriels de developpez.net !!!!!!

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

Discussions similaires

  1. Problème d'utilisation des threads dans mes servlets
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/08/2007, 19h34
  2. Problème d'utilisation des files
    Par AraBorLeg dans le forum C
    Réponses: 4
    Dernier message: 06/01/2007, 20h55
  3. Réponses: 1
    Dernier message: 13/12/2006, 10h00
  4. Problème d'utilisation des attributs width et height avec une image distante
    Par Ptit_Mouss dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/09/2006, 15h40
  5. utilisation des delegate [VB.net]
    Par grand_prophete dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/04/2006, 15h08

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