.net - Downloading af filer med C #

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg kører min metode til at downloade en fil, venter den ikke på, at downloadet er færdigt, før du kalder den næste metode 'unzipfiles', hvordan kan jeg få det til at vente, indtil filen er downloadet?


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();
}

Bedste reference


Ring til din unzipfiles() metode i DownloadFileCompleted event

Andre referencer 1


Du laver downloaden asynkront, hvilket betyder, at koden bare starter downloaden, som derefter er lavet i baggrunden. Når downloadet er gennemført, afbrydes DownloadFileCompleted hændelsen, og din Completed metode er hedder.


Du skal flytte opkaldet til unzipfiles til Completed metoden.

Andre referencer 2


Du kan bare bruge DownloadFile() i stedet for DownloadFileAsync(). Men det ville betyde, at brugergrænsefladen ville være låst under download af filerne, og du bør forsøge at undgå det.


En bedre løsning ville være at ringe unzipfiles() fra din Completed() metode.

Andre referencer 3


Du skal pakke ud i din Completed metode:


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


eller kør download synkront:


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

Andre referencer 4


Hvad du gør er at kalde async-implementeringen af ​​Download File.


For enkelhed kan du bruge-


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


Uden begivenhederne registrerer.


Hvis du vil bruge async-implementeringen, betyder det, at når filen hentes, kalder WebClient-objektet - Afsluttet -metoden - hvor du kan gøre Unzip ....