Bonjour,
J'essaye en ce moment de développez une application qui liste les fichiers d'un dossiers (ainsi que ses sous-dossiers).
Mon problème est que je souhaiterais avoir plusieurs threads et qu'ils communiquent entre eux.
- Le timer doit commencer à partir du moment ou l'utilisateur clique sur le bouton Afficher et s'incrémenter(avec l'affichage en direct) jusqu'à ce que tous les fichiers soit affichés
- La progress bar doit se mettre à jour en temps réel sachant que l'on connait le nombre de fichiers à afficher (1 barre/total fichiers)
- Sur la progressbar j'ai un textblock qui affiche le cours des opération
- Les fichiers sont chargés sans bloquer l'UI
- J'ai aussi un filtre sur les fichiers ce qui explique pourquoi j'utilise un CollectionViewSource
Voici mon UI sous paint dsl^^ :
Je ne maitrise pas le MVVM avec les Commands, mais je comprends (je pense) le concept des viewmodels
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 private IEnumerable<FileInfo> files = null; private ObservableCollection<FileInformationsViewModel> _filesCollection; public CollectionViewSource FilesCollection { get; set; } public ICollectionView FilterFilesCollection { get { return FilesCollection.View; } } public MainView() { this._filesCollection = new ObservableCollection<FileInformationsViewModel>(); FilesCollection = new CollectionViewSource(); FilesCollection.Source = this._filesCollection; InitializeComponent(); } private void browseFolderSource_Click(object sender, RoutedEventArgs e) { string directoryChosen = ShowFolderBrowserDialog(); if (!String.IsNullOrEmpty(directoryChosen)) { pathSourceSelected.Text = directoryChosen; DirectoryInfo topDirectory = new DirectoryInfo(directoryChosen); files = enumerateFileInDirectory(topDirectory); } } private IEnumerable<FileInfo> enumerateFileInDirectory(DirectoryInfo directory) { IEnumerable<FileInfo> result = null; try { result = directory.EnumerateFiles("*", SearchOption.AllDirectories); } catch (DirectoryNotFoundException DirNotFound) { Console.WriteLine("{0}", DirNotFound.Message); } catch (UnauthorizedAccessException UnAuthDir) { Console.WriteLine("UnAuthDir: {0}", UnAuthDir.Message); } catch (PathTooLongException LongPath) { Console.WriteLine("{0}", LongPath.Message); } return result; } private void buttonDisplay_Click(object sender, RoutedEventArgs e) { if (files != null) { var fileVM = from c in files select new FileInformationsViewModel(c, Brushes.LightBlue); foreach (var item in fileVM.OrderBy(x => x.Name).ThenBy(x => x.Length)) { TextBlockInformation.Text = String.Format("Ajout ", item.Name); this._filesLeftCollection.Add(item); } TextBlockInformation.Text = "Prêt"; } }
J'ai essayer d'utiliser un UpdateProgressBarDelegate pour la progressbar et un DispatcherTimer pour mon timer mais rien n'y fait je ne sais pas où les instancier et à quel niveau les déclarer.
Au niveau des recherche je suis sur ces threads mais je n'arrive pas à les adapter à mon problème
http://www.developpez.net/forums/d79...ltithread-wpf/
http://msdn.microsoft.com/fr-fr/vstudio/cc895446.aspx
http://www.codeproject.com/Articles/...onization-in-C
Toutes aide est la bienvenue![]()
Partager