Aracılığıyla paylaş


BackgroundWorker Bileşenine Genel Bakış

Yaygın olarak gerçekleştirilen ve yürütülmesi uzun sürebilen birçok işlem vardır. Örnek:

  • Resim indirmeleri

  • Web hizmeti çağrıları

  • Dosya indirmeleri ve yüklemeleri (eşler arası uygulamalar dahil)

  • Karmaşık yerel hesaplamalar

  • Veritabanı işlemleri

  • Bellek erişimine göre yavaş hızı göz önünde bulundurulduğunda yerel disk erişimi

Bunlar gibi işlemler, kullanıcı arabiriminizin çalışırken engellenmesine neden olabilir. Yanıt veren bir kullanıcı arabirimi istediğinizde ve bu tür işlemlerle ilişkili uzun gecikmelerle karşılaştığınızda, BackgroundWorker bileşen kullanışlı bir çözüm sağlar.

Bileşen BackgroundWorker , uygulamanızın ana kullanıcı arabirimi iş parçacığından farklı bir iş parçacığında zaman alan işlemleri zaman uyumsuz olarak ("arka planda") yürütme olanağı sağlar. kullanmak BackgroundWorkeriçin, arka planda yürütülecek zaman alan çalışan yöntemini söyler ve sonra yöntemini çağırırsınız RunWorkerAsync . Çalışan yöntemi zaman uyumsuz olarak çalışırken çağıran iş parçacığınız normal şekilde çalışmaya devam eder. yöntemi tamamlandığında, BackgroundWorker isteğe bağlı olarak işlemin sonuçlarını içeren olayı tetikleyerek RunWorkerCompleted çağıran iş parçacığını uyarır.

BileşenBackgroundWorker, Araçlar sekmesindeki Araç Kutusu'ndan kullanılabilir. Formunuza bir BackgroundWorker eklemek için, bileşeni formunuza sürükleyinBackgroundWorker. Bileşen tepsisinde ve özellikleri Özellikler penceresinde görüntülenir.

Zaman uyumsuz işleminizi başlatmak için yöntemini kullanın RunWorkerAsync . RunWorkerAsync , bağımsız değişkenleri çalışan yönteminize geçirmek için kullanılabilecek isteğe bağlı object bir parametre alır. BackgroundWorker sınıfı, çalışan iş parçacığınızın bir DoWork olay işleyicisi aracılığıyla eklendiği olayı kullanıma sunarDoWork.

Olay işleyicisi DoWork , özelliği olan bir DoWorkEventArgsArgument parametre alır. Bu özellik parametresini alır RunWorkerAsync ve olay işleyicisinde DoWork çağrılan çalışan yönteminize geçirilebilir. Aşağıdaki örnekte adlı ComputeFibonaccibir çalışan yönteminden sonuç atama işlemi gösterilmektedir. Bu, Nasıl yapılır: Arka Plan İşlemi Kullanan Bir Form Uygulama bölümünde bulabileceğiniz daha büyük bir örneğin parçasıdır.

// This event handler is where the actual,
// potentially time-consuming work is done.
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
   // Get the BackgroundWorker that raised this event.
   BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);

   // Assign the result of the computation
   // to the Result property of the DoWorkEventArgs
   // object. This is will be available to the 
   // RunWorkerCompleted eventhandler.
   e->Result = ComputeFibonacci( safe_cast<Int32>(e->Argument), worker, e );
}
// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender,
    DoWorkEventArgs e)
{
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    // Assign the result of the computation
    // to the Result property of the DoWorkEventArgs
    // object. This is will be available to the
    // RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}
' This event handler is where the actual work is done.
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork

    ' Get the BackgroundWorker object that raised this event.
    Dim worker As BackgroundWorker = _
        CType(sender, BackgroundWorker)

    ' Assign the result of the computation
    ' to the Result property of the DoWorkEventArgs
    ' object. This is will be available to the 
    ' RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci(e.Argument, worker, e)
End Sub

Olay işleyicilerini kullanma hakkında daha fazla bilgi için bkz . Olaylar.

Dikkat

Herhangi bir türde çoklu iş parçacığı kullanırken, potansiyel olarak kendinizi çok ciddi ve karmaşık hatalarla karşı karşıya bırakabilirsiniz. Çoklu iş parçacığı kullanımı kullanan herhangi bir çözümü uygulamadan önce Yönetilen İş Parçacığı Oluşturma En İyi Yöntemleri'ne başvurun.

sınıfını BackgroundWorker kullanma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Arka Planda İşlem Çalıştırma.

Ayrıca bkz.