Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Yaygın olarak gerçekleştirilen ve yürütülmesi uzun sürebilen birçok işlem vardır. Örneğin:
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şeni kullanışlı bir çözüm sağlar.
BackgroundWorker bileşeni, 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. BackgroundWorkerkullanmak için, arka planda yürütülecek vakit alan bir işçi yöntemini belirtir ve ardından RunWorkerAsync yöntemini çağırırsınız. Ç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, BackgroundWorker, işlemin sonuçlarını isteğe bağlı olarak içeren RunWorkerCompleted olayını tetikleyerek çağrı yapan iş parçacığını uyarır.
BackgroundWorker bileşeni, Bileşenleri sekmesindeki Araç Kutusuadresinden kullanılabilir. Formunuza bir BackgroundWorker eklemek için, BackgroundWorker bileşenini formunuza sürükleyin. Bileşen tepsisinde ve özellikleri Özellikler penceresinde görüntülenir.
Zaman uyumsuz işleminizi başlatmak için RunWorkerAsync yöntemini kullanın.
RunWorkerAsync, bağımsız değişkenleri çalışan metodunuza geçirmek için kullanılabilen isteğe bağlı bir object parametresi alır.
BackgroundWorker sınıfı, çalışan iş parçacığınızın bir DoWork olay işleyicisi aracılığıyla eklendiği DoWork olayını kullanıma sunar.
DoWork olay işleyicisi, içinde DoWorkEventArgs özelliği bulunan bir Argument parametresini alır. Bu özellik RunWorkerAsync parametresini alır ve DoWork olay işleyicisinde çağrılacak olan işçi yönteminize geçirilebilir. Bir çalışan yönteminden ComputeFibonacciadlı sonucun nasıl atanacağı aşağıdaki örnekte gösterilmektedir. Bu, daha büyük bir örneğin parçasıdır ve Nasıl Yapılır: Arka Plan İşlemi Kullanan Bir Form Nasıl Gerçekleştirilirbölümünde bulabilirsiniz.
// 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. Çok iş parçacığı kullanan bir çözüm uygulamadan önce Yönetilen İş Parçacığı En İyi Yöntemleri gözden geçirin.
BackgroundWorker sınıfını kullanma hakkında daha fazla bilgi için bkz. Nasıl yapılır: Arka Planda İşlem Çalıştırma.
Ayrıca bakınız
.NET Desktop feedback