Bonjour,

J'ai un projet où à chaque création de fichier, j'ai un traitement sur le dit fichier.
J'utilise filesystemwatcher pour détecter la création du fichier.
Sur l’événement de celui ci, je lance la tache dans le threadpool :
code ci dessous :

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
 
        public List<ManualResetEvent> ThState;
        private List<SearchEngineFrame> SEFState;
   private void FileAdded(String FullPath)
        {
            if (File.Exists(FullPath) && FullPath.Contains("wk") && (Path.GetExtension(FullPath).ToLower() == ".png" ||
                Path.GetExtension(FullPath).ToLower() == ".jpg"
                || Path.GetExtension(FullPath).ToLower() == ".jpeg"
                || Path.GetExtension(FullPath).ToLower() == ".bmp"
                || Path.GetExtension(FullPath).ToLower() == ".gif"))
            {
                try
                {
                    ManualResetEvent tmp = new ManualResetEvent(false);
                    SearchEngine d = new SearchEngine(   GlobalData.StartValue,tmp,"Ressources\\Scope.csp",Properties.Settings.Default.Ratio);
                    ThState.Add(tmp);
                    SEFState.Add(d);
 
                    ThreadPool.QueueUserWorkItem(d.ThreadPoolCallback, FullPath);
                    Thread.Sleep(500);
                    _NbFileCalculate += 1;
                    if (( _NbFileCalculate >=_NbFile) && (this.OnEnded != null)) 
                        OnEnded(this, new EventArgs());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
Je connais le nombre de fichiers qui va être générer. Lorsque tout les fichiers sont générés, je désire fermer ma fenêtre. Avant cela, je voudrais savoir si toutes mes tâches sont bien terminées.
Pour l'instant, j'utilise sur la demande d'arrêt de mon filesystemwatcher, le code ci dessous.
Je ne pense pas que cela soit optimale car je bloque les threads :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
   foreach (ManualResetEvent obj in ThState) obj.WaitOne();
Comment puis je faire ?