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:
J'ai fait ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3L'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
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
4L'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 !!!
Partager