C# Asenkron Dosya İndirme

C# Asenkron Dosya İndirme

C# Asenkron Dosya İndirme

  4 dakika Okuma Süresi
Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde asenkron dosya indirme işlemlerini anlatacağım.
Senkron bi indirme işlemi yapmak istediğimizde dosya inene kadar program donar ve kullanamazsınız fakat asenkron bir indirme işlemi yaparken indirme işlemi arka planda yapılır ve hem indirme aşamasında program donmaz, hemde indirmeyi takip edebilirsiniz.
Senkron dosya indirme yazımız için buraya tıklayabilirsiniz.
Bu kadar açıklamadan sonra hadi başlayalım !

Öncelikle Visual Studio aracılığıyla bi tane proje oluşturalım ve indirme yapmak istediğimiz formun kodlarına geçiş yapalım.
Asenkron indirme yapmak için tıpkı senkron indirmede olduğu gibi System.Net kütüphanesini kullanacağız. Öncelikle bu kütüphaneyi sayfada çağıralım. Bunun için sayfanın en başına
using System.Net;
kod satırını ekleyelim.
Ardından kullanacağımız sınıfın yani WebClient sınıfının yeni bir nesnesini türetelim. Yani;
WebClient client = new WebClient();
Ayrıca karakter kodlamasını belirtmek istersek nesne türettikten hemen sonra
client.Encoding = Encoding.UTF8;
kod satırını ekleyebiliriz.

Senkron indirme işleminde DownloadFile() fonksiyonunu kullanmıştık fakat asenkron indirme yapmak için DownloadFileAsync() fonksiyonunu kullanacağız.
Bu fonksiyon indirilecek dosyanın kaynağı ve kaydedilecek konum olmak üzere string tipte olan 2 parametre alıyor.
Ayrıca türettiğimiz WebClient nesnesinin indirme devam ederken rapor veren DownloadProgressChanged ve indirmenin bittiğine dair DownloadFileCompleted eventleri bulunmakta. Bu eventler ile indirme işlemini takip edebiliyoruz.
Fakat bu eventleri indirmeye başlamadan önce belirtmemiz gerekiyor çünkü kod akışına dikkat edersek, dosyayı indir dediğimizde thread orada bekleyecek ve indirme bittiğinde bir sonraki satıra geçecektir. Bir sonraki satırda indirme işlemi tamamlanmış ve WebClient nesnesinin işi bitmiş olacağından DownloadFileCompleted ve DownloadProgressChanged eventleri tetiklenemeyecektir.
Bu yüzden WebClient nesnesini türettikten sonra eventleri tanimlamamız gerek.

DownloadProgressChanged eventi object ve DownloadProgressChangedEventArgs tipinde 2 tane parametre alıyor.
DownloadProgressChangedEventArgs nesnesi ile raporlama işlemini yapıyor ve object nesnesi de WebClient'in kendisini tutuyor.
DownloadProgressChangedEventArgs nesnesi içerisinde bulunan ProgressPercentage nesnesi ile dosyanın yüzde kaç indirildiğini görebiliyoruz.
DownloadFileCompleted eventi ise object ve AsyncCompletedEventArgs olmak üzere 2 parametre alıyor. Daha önce de bahsettiğim üzere indirme işlemi bitince tetikleniyor.

Bahsettiğim iki eventin örnek kullanımı şu şekilde;
client.DownloadProgressChanged += (sender, e) => {
    Console.WriteLine("Dosya % {0} Indirildi", e.ProgressPercentage);
};
client.DownloadFileCompleted += (sender, e) => {
    Console.WriteLine("Dosya Başarıyla Indirildi");
};

Evet buraya kadar indirme işlemini takip ettik ve artık örneğin siteadi.com/deneme.txt dosyasını indirip masaüstünde deneme.txt isminde kaydedelim.
client.DownloadFileAsync ("http://siteadi.com/deneme.txt", "c:/users/kullanici/desktop/deneme.txt");
Elbette indirilen dosyayı farklı bir isimle de kaydedebiliyoruz, burada örnek olması için aynı isimde kaydettik.

Bu dersimizde bu kadardı, buraya kadar yazdığımız kodları daha toplu olması için aşağıya bırakıyorum;
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
client.DownloadProgressChanged += (sender, e) => {
    Console.WriteLine("Dosya % {0} Indirildi", e.ProgressPercentage);
};
client.DownloadFileCompleted += (sender, e) => {
    Console.WriteLine("Dosya Başarıyla Indirildi");
};
client.DownloadFileAsync ("http://siteadi.com/deneme.txt", "c:/users/kullanici/desktop/deneme.txt");

Tüm C# derslerimize ulaşmak için buraya tıklayabilirsiniz.
Herkese hayırlı günler.


  • İçeriği Paylaş:

İÇERİĞİ DEĞERLENDİR

Toplam Değerlendirme Sayısı: 0
Toplam Değerlendirme: 0 / 5

Cevap Yaz