BackgroundWorker Bileşenine Genel Bakış
Yürütülmesi uzun zaman alabilir çok sayıda gerçekleştirilen işlem vardır. Örneğin:
Görüntü İndirmeleri
Web hizmeti etkinleştirmeleri
Dosya indirmeleri ve karşıya yüklemeleri (eşler arası uygulamalar için de dahil)
Karmaşık yerel hesaplamalar
Veritabanı işlemleri
Yerel disk erişimi, bellek erişimine göre yavaş hız olarak verildi
Bunlar gibi işlemler, Kullanıcı arabiriminize çalışırken engel olmasına neden olabilir. Yanıt veren bir kullanıcı arabirimi istediğinizde ve söz konusu işlemlerle ilişkili uzun gecikmeler varsa, BackgroundWorker bileşen kullanışlı bir çözüm sağlar.
BackgroundWorkerBileşen, uygulamanızın ana kullanıcı arabirimi iş parçacığından farklı bir iş parçacığında zaman uyumsuz işlemleri ("arka planda") yürütme yeteneği sağlar. Bir kullanmak için BackgroundWorker , arka planda hangi zaman tüketen çalışan yönteminin yürütüleceğini ve sonra yöntemi çağırılacağını söylemeniz yeterlidir RunWorkerAsync . Çalışan yöntemi zaman uyumsuz olarak çalışırken, çağıran iş parçacığınız normal şekilde çalışmaya devam eder. Yöntem tamamlandığında, BackgroundWorkerRunWorkerCompleted isteğe bağlı olarak işlemin sonuçlarını içeren olayı tetikleyerek çağıran iş parçacığını uyarır.
BackgroundWorkerBileşen BackgroundWorker, Bileşenler sekmesinde kullanılabilir. Formunuza bir eklemek için , BackgroundWorker bileşeni formunuza sürükleyin. Bileşen tepsisinde görünür ve özellikleri Özellikler penceresinde görünür.
Zaman uyumsuz işleminizi başlatmak için RunWorkerAsync yöntemini kullanın. RunWorkerAsyncobject, çalışan yönteminizin bağımsız değişkenlerini geçirmek için kullanılabilen isteğe bağlı bir parametre alır. BackgroundWorkerSınıfı DoWork , çalışan iş parçacığınız bir olay işleyicisi aracılığıyla bağlı olan olayı ortaya koyar DoWork .
DoWorkOlay işleyicisi bir DoWorkEventArgs özelliği olan bir parametre alır Argument . Bu özellik öğesinden parametresini alır RunWorkerAsync ve olay işleyicisinde çağrılabilecek çalışan yöntemine geçirilebilir DoWork . Aşağıdaki örnekte, adlı bir çalışan yönteminden bir sonucun nasıl atanacağı gösterilmektedir ComputeFibonacci . Nasıl yapılır: arka plan Işlemi kullanan bir form uygulamabölümünde bulabileceğiniz daha büyük bir örneğin bir 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 sıralamanın çoklu iş parçacığı kullanımı kullanılırken, kendinizi çok önemli ve karmaşık hatalara maruz kalırsınız. Çoklu iş parçacığı kullanan herhangi bir çözümü uygulamadan önce, yönetilen Iş parçacığı En Iyi uygulamalarına danışın.
Sınıfını kullanma hakkında daha fazla bilgi için BackgroundWorker bkz. BackgroundWorker.