Bonjour,
Développant toujours mon lecteur audio je voulais ajouter une fonctionnalité qui est que l'utilisateur à l'aide d'un FolderBrowserDialog indique un dossier, et depuis ce dossier l'application va le traverser lui et ces sous-dossier à la recherche de fichiers musicaux. Ma fonction marche nickel. Cependant quand on est sur un petit dossier cela est assez rapide, mais à partir du moment où je choisis la racine du disque le temps d'attente est déjà beaucoup plus (trop?) long. L'interface n'a pas la main donc l'utilisateur doit attendre. De plus le temps que le chargement se fasse la FolderBrowserDialog ne disparait.
Je connais les principes de bases du MultiThread mais je ne l'ai jamais appliqué en C# et encore moins sous WPF (même si je pense que c'est plus lié au C# qu'à WPF). Bref quoi qu'il en soit j'ai fait des recherches et des tests sans succés. J'ai trouvé ce sujet mais je n'ai pas beaucoup avancé.
Je vous montre ma fonction de recherche:
Et l'appel ce fait ici:
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 //parcours les dossiers et sous dossier à la recherche de fichier à ajouter à la biblio private void searchFolder(string path) { //traverse tous les fichiers du dossier string[] File = Directory.GetFiles(path); foreach (string Fichier in File) { if(this.AllowedExt.Contains(System.IO.Path.GetExtension(Fichier).ToLower())) { TagLib.File file = TagLib.File.Create(Fichier); this.mainPlaylist.Add( Fichier, file.Tag.Title, file.Tag.FirstAlbumArtist, file.Tag.Album, file.Properties.Duration.Minutes.ToString("00")+":"+file.Properties.Duration.Seconds.ToString("00") ); } } //traverse les sous dossiers string[] Folder = Directory.GetDirectories(path); foreach (string Dossier in Folder) { if((System.IO.File.GetAttributes(Dossier) & FileAttributes.System) != FileAttributes.System) this.searchFolder(Dossier); } }
Ce que je voudrais c'est un peu d'aide, de manière assez simple pour débuter avec le multithreading en C#. Que vous puissiez m'aider à avancer là dessus car la c'est la panne sèche totale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private void button2_Click(object sender, RoutedEventArgs e) { FolderBrowserDialog FolderDialog = new FolderBrowserDialog(); DialogResult result = FolderDialog.ShowDialog(); if(result == System.Windows.Forms.DialogResult.OK) { this.searchFolder(FolderDialog.SelectedPath); } }
Je vous remercie d'avance.
Partager