Bonjour tout le monde ;

Je travail sur le mode asynchrone pour télécharger des fichiers en utilisant le WebClient.
Mon classe Downloder est instance pour télécharger un seul fichier.
Donc pour télécharger mes fichiers je fais.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
foreach (WebServiceClient.ProductFile file in Files)
     {
       down = new Downloader(file, file. SourcePath,file.DestinationPath);
       down.StartDownloadFile();
 
 
      }
Et à chaque fin de téléchargement d’un fichier je fais un traitement.

Mais le grand traitement ce fait à la fin de téléchargement de tous fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public void StartDownloadFile()
 {
 
   Client.Credentials = new SeverUsersRights();//client is a WebClient 
   Client. DownloadFileAsync(new Uri(@ServerPath + FileSourcePath),@FileDestinationPath);
 
 }
Pour savoir la fin de telechargement d’un fichier j’ai fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Client.DownloadFileCompleted += new AsyncCompletedEventHandler(OnDownloadFileCompleted);
 
void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
 
 
           //traitement de fichier telechargé 
 
        }
Ma question est la suivante

Comment je peux savoir que j’ai termine le téléchargement de tous mes fichiers ?
Ma solution :

Je me dis que lors du lancement de téléchargement de mon fichier je peux faire un

List/arraylist /dictionnaire ….. Pour ajouter les fichiers encours de téléchargement.
Je m’explique
Par exemple je peux faire


Code : Sélectionner tout - Visualiser dans une fenêtre à part
List<file> filesdown=new List<file> ;
Et à chaque fois que je lance un téléchargement je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
foreach (WebServiceClient.ProductFile file in Files)
     {
       down = new Downloader(file, file. SourcePath,file.DestinationPath);
       down.StartDownloadFile();
       filesdown.Add(file) ;
 
      }
Et chaque fin de téléchargement d’un fichier je lui retire de ma liste pour dire que le téléchargement de ce dernier est terminé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
 
 
           //traitement de fichier telechargé 
           Filesdown.Remove(file) ;
If (filesdown.count ==0)
{
  FileDownloadAsyncEventArgs PersonalEvent = new FileDownloadAsyncEventArgs(FileDestinationPath,10000,DateTime.Now );
 
            if (PersonalEvent != null) DownloadFilesCompleted(this, PersonalEvent);//evenement de fin de telechargement de tous les fichiers 
}
        }
Est ce que ma solution est convenable sinon Est ce que il y’a une autre méthode pour résoudre mon problème ?

merci