DownFile
- это метод async void
. Вызов такого метода называется пожаром и забыванием, потому что у вас нет возможности определить, когда асинхронная операция завершилась. На самом деле вы почти никогда не хотите использовать async void
, за исключением случая с обработчиками событий. Вместо этого используйте async Task
для асинхронных операций, которые не возвращают значение. В вашем случае у вас есть прекрасный пример, когда использовать async void
, а когда async Task
.
async Task DownFile(string savep, string url)
{
using (WebClient webClient = new WebClient())
{
webClient.UseDefaultCredentials = true;
webClient.DownloadProgressChanged += client_DownloadProgressChanged;
webClient.DownloadFileCompleted += client_DownloadFileCompleted;
await webClient.DownloadFileTaskAsync(new Uri(url), savep);
}
}
private async void button1_Click(object sender, EventArgs e)
{
label1.Text = "Download In Process";
await DownFile(savep, url);
label1.Text = "unzip";
Program.ExtractZipFile(savep, "", Application.StartupPath);
button1.Enabled = false;
}