BackgroundWorker ile Çalışmak

29-6-2005

BackgroundWorker .NET Framework 2' deki Windows Forms için en pratik özelliklerden biri. Basit şekilde uzun işler yaparken kullanıcı arabiriminin (UI) kullanılamaz gelmesini engellemek için geliştiricilerin yeni threadlarda açtığı background tasklarını daha pratik hale getirmek.

Kullanımı şu şekilde;

  1. Bir BackgroundWorker oluşturun
    Componentlardan sürükle bırak yada direk koddan
  2. DoWork event' ını hazırlayın
    DoWork
    Event' ı ana kısım, yani yapılacak iş. Buraya arka planda çalışacak kodunuzu koyun, yada ilgili metodu çağırın
  3. BackgroundWorker'ı Çalıştıralım
    RunWorkerAsync() bizim için hazırladığımız BackgroundWorker' ı çalıştıracak yani DoWork ü tetikleyecek
  4. ReportProgress ile UI ye bildirelim
    ReportProgress() ile arkaplandaki kodun durumunu bildirebilirsiniz bu ProgressChanged eventını tetikleyecek
  5. ProgressChanged ile UI' ye elleyelim
    ProgressChanged eventında ana thread olan UI üzerinde istediğimiz değişikliği yapabiliriz

Niye bu kadar kastık direk arkadaki thread' dan öndeki thread mesaj gönderelim diyebilirsiniz ancak maalesef bu threadlar exception neden oluyor. Framework 1' de bunu kazasız belasız yapabiliyorduk her ne kadar hoş bir pratik olmasa da çünkü bu şekilde Windows Message Queue' sini ihlal ediyoruz, Ancak BackgroundWorker ile doğru yolda işi halletmiş oluyoruz. Framework 1' için yazılmış ve konuyu daha geniş ele alan Safe, Simple Multithreading in Windows Forms serisini tavsiye ederim.

Örnek Projeyi Download Edin;
Örneği mümkün olan en basit şekilde tutmaya çalıştım, basit olarak BackgroundWorker' ı implemente etmeyi, arkada çalışan threadi iptal etmeyi ve UI ile ilişki kurmayı gösteriyor. Kod sadece 60 satır civarında, VS 2005 gereklidir.

BgTester.zip (56 Kb.)

Daha derin bilgi ve gelişmiş bir örnek için Advanced Basics : Doing Async the Easy Way

Recent Blog Posts

See all of the blog posts