Merhaba Webkolog okurları! Bugün C# .Net Framework 4 ve Visual Studio 2010 kullanarak uygulamalarımızda uzun süren işlemleri arka planda gerçekleştirmek ve kullanıcı arayüzünü bloke etmemek için kullandığımız BackgroundWorker kontrolünü yakından inceleyeceğiz. BackgroundWorker, özellikle zaman alan işlemlerin (dosya kopyalama, veritabanı sorguları, ağ işlemleri vb.) kullanıcı deneyimini olumsuz etkilememesini sağlamak için önemlidir. Gelin, bu kontrolün temel özelliklerine ve kullanımına birlikte göz atalım.
BackgroundWorker Kontrolü
Nedir?
BackgroundWorker kontrolü, bir işlemi ana uygulama iş
parçacığından (UI thread) ayrı bir iş parçacığında (thread) çalıştırmamızı
sağlayan bir bileşendir. Bu sayede, uzun süren işlemler uygulama arayüzünü
bloke etmez ve kullanıcı etkileşimine açık kalır.
BackgroundWorker
Kontrolünü Kullanma
- BackgroundWorker Oluşturma:
- Visual Studio 2010'da, Toolbox'tan bir BackgroundWorker kontrolünü
formunuza sürükleyerek veya kodda bir BackgroundWorker nesnesi
oluşturarak başlayabilirsiniz.
- DoWork Olayını İşleme:
- DoWork olayı, arka planda çalışacak olan kodu içerir. Bu olayda,
uzun süren işlemleri gerçekleştiririz.
- ProgressChanged Olayını İşleme (İsteğe Bağlı):
- ProgressChanged olayı, arka plandaki işlemin ilerlemesini kullanıcı
arayüzüne bildirmek için kullanılır. Bu olayda, ilerleme durumunu (yüzde
olarak) ve isteğe bağlı kullanıcı verilerini güncelleyebiliriz.
- RunWorkerCompleted Olayını İşleme (İsteğe Bağlı):
- RunWorkerCompleted olayı, arka plandaki işlem tamamlandığında
tetiklenir. Bu olayda, sonucu alabilir, hataları işleyebilir ve kullanıcı
arayüzünü güncelleyebiliriz.
Örnek Kullanım
Aşağıdaki örnekte, bir BackgroundWorker kullanarak bir
dosya kopyalama işlemini arka planda gerçekleştirmeyi ve ilerleme durumunu bir
ProgressBar ile göstermeyi ele alıyoruz:
private void button1_Click(object sender, EventArgs e)
{
// Arka plan işlemini başlatın. "Yol" argümanını DoWork olayına gönderir.
backgroundWorker1.RunWorkerAsync("Yol");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Arka plan iş parçacığında çalışacak kod.
string yol = e.Argument.ToString(); // Gönderilen argümanı alın.
// Dosya kopyalama işlemini burada gerçekleştirin.
// ...
// İlerleme durumunu bildirin (isteğe bağlı).
// backgroundWorker1.ReportProgress(yuzdeTamamlanma, durumMesaji);
for (int i = 0; i <= 100; i++)
{
Thread.Sleep(100);
backgroundWorker1.ReportProgress(i, $"Dosya kopyalanıyor... {i}%");
}
e.Result = "İşlem Tamamlandı"; // Sonucu RunWorkerCompleted olayına gönderin.
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Kullanıcı arayüzü iş parçacığında çalışacak kod.
// İlerleme çubuğunu ve/veya diğer UI öğelerini güncelleyin.
listBox1.Items.Add(e.UserState);
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show("Hata oluştu: " + e.Error.Message);
}
else if (e.Cancelled)
{
MessageBox.Show("İşlem iptal edildi.");
}
else
{
MessageBox.Show(e.Result.ToString());
}
}
Bu örnekte, button1_Click olayında RunWorkerAsync()
metodunu çağırarak arka plan işlemini başlatıyoruz. DoWork olayında dosya
kopyalama işlemini gerçekleştiriyoruz. ReportProgress() metodu ile ilerleme
durumunu ProgressChanged olayına bildiriyoruz. ProgressChanged olayında ise
ProgressBar ve ListBox kontrollerini güncelleyerek kullanıcıya geri bildirim
sağlıyoruz. RunWorkerCompleted olayında ise işlemin sonucunu veya bir hata
oluşup oluşmadığını kontrol ediyoruz.
BackgroundWorker
Kontrolünün Özellikleri
- WorkerReportsProgress: Arka plan işleminin ilerleme bildirimlerini
destekleyip desteklemediğini belirtir.
- WorkerSupportsCancellation: Arka plan işleminin iptal edilip edilemeyeceğini
belirtir.
BackgroundWorker
Kontrolünün Olayları
- DoWork: Arka planda çalışacak olan kodu içerir.
- ProgressChanged: İlerleme durumu değiştiğinde tetiklenir.
- RunWorkerCompleted: Arka plan işlemi tamamlandığında tetiklenir.
BackgroundWorker
Kontrolünün Metotları
- RunWorkerAsync(): Arka plan işlemini başlatır.
- ReportProgress(): İlerleme durumunu bildirir.
- CancelAsync(): Arka plan işlemini iptal etmeye çalışır.
- Reset(): BackgroundWorker'ı yeniden kullanılabilir hale getirir.
Önemli Notlar:
- UI Thread Erişimi: DoWork olayında asla doğrudan kullanıcı
arayüzü kontrollerine erişmeyin. UI kontrollerine sadece ProgressChanged
ve RunWorkerCompleted olaylarında erişebilirsiniz, çünkü bu olaylar UI
thread üzerinde çalışır.
- İptal Desteği: Arka plan işleminin iptal edilebilir olması için
WorkerSupportsCancellation özelliğini true olarak ayarlayın ve DoWork
olayında CancellationPending özelliğini kontrol ederek iptal isteğini
işleyin.
Sevgili Webkolog okurları, C# .Net Framework 4 ve Visual Studio 2010 kullanarak BackgroundWorker kontrolünün temel kullanımını ve bazı önemli özelliklerini bu şekilde incelemiş olduk. Bu kontrol, uygulamalarınızda uzun süren işlemleri arka planda gerçekleştirerek kullanıcı deneyimini artırmanıza ve uygulamanızın daha hızlı ve duyarlı olmasını sağlamanıza yardımcı olur.
Webkolog'u takipte kalın!
Hepinize bol iş parçacıklı ve başarılı projeler
dilerim!
0 yorum:
Yorum Gönder