İster Web ister Windows uygulamanızdan arkaplanda WebClient nesnesini kullanarak dosya download ve upload işlemlerini kolaylıkla yapabilirsiniz. Tabi eğer bu işlemi kullanıcıya yansıtmak isterseniz ozaman farklı kontrollerden yararlanmanız gerekecek. Windows uygulamalarında bu iş için en çok kullanılan kontrol bildiğiniz gibi ProgressBar.
Bu makalemizde internetten herhangi bir dosyayı bilgisayarımıza download edeceğiz ve işlemi progressbarda göstereceğiz.
Öncelikle Visual Studio da Windows Application başlatalım.

webclient-ile-dpwnload-1

webclient-ile-dpwnload-1

Yukarıdaki şekilde Form tasarmınızı yapın.”İndirilen ve Toplam Labellarının yanlarında Text özellikleri boş Labellar var.”
Form’un Load evetinden progressbarın Maximum değerini 100 yapalım.
private void Form1_Load(object sender, EventArgs e)
{
     progressBar1.Maximum = 100;
}
İndir button’unun click event’inde WebClient nesnesinden bir yavru değişken tanımlayalım ve gerekli eventlerini oluşturalım. Burada yol değişkenine indirmek istediğimiz dosyanın adresini yazdık ve kaydet değişkeninde ise bilgisarımızda kaydedeceğimiz yolu yazdık.

using System.Net; Kütüphanesini eklemeyi unutmayın!

private void button1_Click(object sender, EventArgs e)
{
      WebClient indir = new WebClient();
      Uri yol = new Uri(“https://www9.limewire.com/download/LimeWireWin.exe”);
      indir.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DosyaIndir);
      indir.DownloadFileCompleted += new AsyncCompletedEventHandler(Indirildi);
      string kaydet=yol.ToString().Substring(yol.ToString().LastIndexOf(‘/’) + 1);
      indir.DownloadFileAsync(yol,kaydet );
 }
Not:WebClient asenkron çalıştığı için çalıştığınız kanalı tıkamayacaktır. Bu nedenle bir yandan download işlemi yapılırken bir yandanda başka işlemler yapılabilinir.
Label1 ‘e şuana kadar indirilen Btye sayısını yazdırıyoruz Label2 ye ise dosyadaki toplam Byte sayısını.
private void DosyaIndir(object sender, DownloadProgressChangedEventArgs e)
{
      progressBar1.Value = e.ProgressPercentage;
      label1.Text = e.BytesReceived.ToString();
      label2.Text = e.TotalBytesToReceive.ToString();
}
private void Indirildi(object sender, AsyncCompletedEventArgs e)
{
      MessageBox.Show(“indirme Tamamlandı”);
      MessageBox.Show(e.UserState.ToString());
}
webclient-ile-dpwnload-2

webclient-ile-dpwnload-2

Uygulamamızı çalıştırdığımızda işlem progressbar’da görüntülenecek ve dosya indirme işlemi bittiğinde “İndirme Tamamlandı” mesajı görüntülenecektir.