Bonjour,

J'ai un treeview qui représente l'arborescence de toute la machine (disques, cd, lecteurs réseaux ...)

Mon problème, c'est que le chargement est très long ... (presque 1 min)
Je voudrais savoir s'il existe un moyen d'accélérer le chargement.

Voici comment je charge mon treeView:

Départ d'un composant BackGroundWorker
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
 
        private void BGW_TREEVIEW_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bgw = sender as BackgroundWorker;
            TreeNode Machine = Initialize_machineNode();
            bgw.ReportProgress(0, Machine);
            foreach (DriveInfo logicalDrive in _logicalDrives)
            {
                TreeNode Drive = Initialize_rootNode(logicalDrive);
                bgw.ReportProgress(1, Drive);
            }
        }
 
 
        //Initialisation de noeud MACHINE
        private TreeNode Initialize_machineNode()
        {
            TreeNode MachineNode = new TreeNode();
            MachineNode.Name = _machine;
            MachineNode.Text = _machine;
            MachineNode.ImageKey = "tree_computer";
            return MachineNode;
        }
 
 
        //Initialisation d'un noeud et de ses enfants pour un lecteur
        private TreeNode Initialize_rootNode(DriveInfo driveInfo)
        {
            TreeNode Drive = new TreeNode();
            Drive = CreateDrive(driveInfo);
            CreateNode(Drive);
            return Drive;
        }
 
        //Création des noeuds pour les lecteurs 
        private TreeNode CreateDrive(DriveInfo drive)
        {
            TreeNode tn = new TreeNode();
            try
            {
                tn.Name = drive.Name;
                tn.Text = drive.Name;
                tn.Tag = drive.Name;
 
                tn.ToolTipText = "Lecteur: " + drive.DriveType.ToString() + "\n";
                tn.ToolTipText += "Espace total: " + (drive.TotalSize / 1000000).ToString("00.00") + " Mo\n";
                tn.ToolTipText += "Espace libre: " + (drive.AvailableFreeSpace / 1000000).ToString("00.00") + " Mo";
                tn.ImageKey = SetDriveImageKey(drive);
            }
            catch (Exception e)
            {
                new Error().Write(e);
                tn.Name = drive.Name;
                tn.Text = drive.Name;
                tn.Tag = drive.Name;
                tn.ToolTipText = "Lecteur: ? \n";
                tn.ToolTipText += "Espace total: ? \n";
                tn.ToolTipText += "Espace libre: ? ";
                tn.ImageKey = SetDriveImageKey(drive);
 
            }
            return tn;
        }
 
        //Création des noeuds enfants (fonction récursive)
        private void CreateNode(TreeNode Father)
        {
            try
            {
                foreach (DirectoryInfo dir in new DirectoryInfo(Father.Tag.ToString()).GetDirectories())
                {
                    TreeNode tn = new TreeNode();
                    tn.Name = dir.FullName;
                    tn.Tag = dir.FullName;
                    tn.Text = dir.Name;
                    tn.ToolTipText = "Dernière modification: " + dir.LastWriteTime.ToLongDateString();
                    tn.ImageKey = "tree_document_closed";
                    Father.Nodes.Add(tn);
                    _totalDirectoryInSystem++;
                    CreateNode(tn);
                }
            }
            catch (Exception e)
            {
                new Error().Write(e);
            }
        }


Merci beaucoup pour votre aide !!