2011-06-25 4 views
1

Lorsque j'utilise ma méthode pour télécharger un fichier, il n'attend pas que le téléchargement se termine avant d'appeler la méthode suivante "unzipfiles", comment puis-je attendre que le fichier soit téléchargé?Téléchargement de fichiers avec C#

private void Download_Click(object sender, EventArgs e) 
{ 
    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); 
    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); 
    webClient.DownloadFileAsync(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip"); 
    // Call unzip method 
    unzipfiles(); 
} 

Répondre

5

Appelez votre méthode unzipfiles() dans l'événement DownloadFileCompleted

2

Vous faites le téléchargement de manière asynchrone, ce qui signifie que le code commence juste le téléchargement, qui est ensuite fait en arrière-plan. Une fois le téléchargement terminé, l'événement DownloadFileCompleted est déclenché et votre méthode Completed est appelée. Vous devez déplacer l'appel à unzipfiles vers la méthode Completed.

2

Vous pouvez simplement utiliser DownloadFile() au lieu de DownloadFileAsync(). Cependant, cela signifierait que l'interface utilisateur serait verrouillée pendant le téléchargement des fichiers, et vous devriez essayer d'éviter cela. Une meilleure solution serait d'appeler unzipfiles() à partir de votre méthode Completed().

1

Vous devez dézipper dans votre méthode Completed:

void Completed(object sender, AsyncCompletedEventArgs e) 
{ 
    unzipfiles(); 
} 

ou exécuter le téléchargement synchrone:

WebClient webClient = new WebClient(); 
webClient.DownloadFile(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip"); 
unzipfiles(); 
0

Qu'est-ce que vous faites appelle la mise en œuvre async du fichier de téléchargement.

Par souci de simplicité, vous pouvez utiliser-

webClient.DownloadFile(new Uri("http://download1us.softpedia.com/dl/f4932a906a7dd98c7ff002b07e9bd94b/4e065004/100079174/software/portable/security/ccsetup307.zip"), @"ccsetup307.zip"); 

Sans les événements ENREGISTRER.

Si vous voulez utiliser l'implémentation async, cela signifie que lorsque le fichier est téléchargé l'objet WebClient appellera la - méthode Terminé - où vous pouvez faire la Décompressez ....

Questions connexes