private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == DialogResult.OK)
{
WebClient wc = new WebClient();
wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
wc.DownloadFileAsync(new Uri(textBox1.Text), sfd.FileName);
}
}
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Pobieranie ukończone");
}
Gotowy projekt do pobrania: DownloadAsync.zip
I na koniec jeszcze jedna uwaga. Chociaż metoda jest asynchroniczna to i tak może na chwilę zablokować główny wątek. Dzieje się tak ponieważ przed pobraniem pliku konieczna jest zamiana adresu na IP i dzieje się to wewnątrz funkcji, która niestety jest blokująca. Aby temu zapobiec wystarczy (o ile to możliwe) zamiast nazwy podać IP.
Brak komentarzy:
Prześlij komentarz