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.
Et à chaque fin de téléchargement d’un fichier je fais un traitement.
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(); }
Mais le grand traitement ce fait à la fin de téléchargement de tous fichiers.
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 public void StartDownloadFile() { Client.Credentials = new SeverUsersRights();//client is a WebClient Client. DownloadFileAsync(new Uri(@ServerPath + FileSourcePath),@FileDestinationPath); }
Ma question est la suivante
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é }
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
Et à chaque fois que je lance un téléchargement je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<file> filesdown=new List<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 foreach (WebServiceClient.ProductFile file in Files) { down = new Downloader(file, file. SourcePath,file.DestinationPath); down.StartDownloadFile(); filesdown.Add(file) ; }
Est ce que ma solution est convenable sinon Est ce que il y’a une autre méthode pour résoudre mon problème ?
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 } }
merci
Partager