BackgroundWorker.DoWork Olay
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Çağrıldığında RunWorkerAsync() gerçekleşir.
public:
event System::ComponentModel::DoWorkEventHandler ^ DoWork;
public event System.ComponentModel.DoWorkEventHandler DoWork;
public event System.ComponentModel.DoWorkEventHandler? DoWork;
member this.DoWork : System.ComponentModel.DoWorkEventHandler
Public Custom Event DoWork As DoWorkEventHandler
Olay Türü
Örnekler
Aşağıdaki kod örneği, zaman uyumsuz bir işlem başlatmak için olayın kullanımını DoWork gösterir. Bu kod örneği, sınıfı için BackgroundWorker sağlanan 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.
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
Açıklamalar
Yöntemini çağırdığınızda RunWorkerAsync bu olay tetikleniyor. Burası, zaman alıcı olabilecek işleri gerçekleştiren işlemi başlattığınız yerdir.
Olay işleyicisindeki DoWork kodunuz, özellik değerini düzenli aralıklarla denetlemeli CancellationPending ve ise trueişlemi durdurmalıdır. Bu durumda bayrağını CancelSystem.ComponentModel.DoWorkEventArgstrueolarak ayarlayabilirsiniz ve Cancelled olay işleyicinizdeki RunWorkerCompleted bayrağı System.ComponentModel.RunWorkerCompletedEventArgs olarak ayarlanır.true
Dikkat
Olay işleyicisindeki DoWork kodunuzun bir iptal isteği yapılırken çalışmasını tamamlayaabileceğini ve yoklama döngünüzün olarak ayarlanmasını truekaçırabileceğini CancellationPending unutmayın. Bu durumda, Cancelled bir iptal isteği yapılmış olsa bile olay işleyicinizdeki RunWorkerCompleted bayrağı System.ComponentModel.RunWorkerCompletedEventArgs olarak ayarlanmaztrue. Bu durum bir yarış durumu olarak adlandırılır ve çok iş parçacıklı programlamada yaygın bir sorundur. Çok iş parçacıklı tasarım sorunları hakkında daha fazla bilgi için bkz. Yönetilen İş Parçacığı Oluşturma En İyi Yöntemleri.
İşleminiz bir sonuç üretirse, sonucu özelliğine DoWorkEventArgs.Result atayabilirsiniz. Bu, özelliğindeki RunWorkerCompleted olay işleyicisi RunWorkerCompletedEventArgs.Result tarafından kullanılabilir.
İşlem kodunuzun işlemediği bir özel durum oluşturursa, BackgroundWorker özel durumu yakalar ve özelliği olarak kullanıma sunulduğu olay işleyicisine ErrorSystem.ComponentModel.RunWorkerCompletedEventArgsgeçirirRunWorkerCompleted. Visual Studio hata ayıklayıcısı altında çalıştırıyorsanız, hata ayıklayıcı işlenmeyen özel durumun oluşturulduğu olay işleyicisindeki DoWork noktada kırılır. Birden BackgroundWorkerfazla varsa, olay işleyicinizi DoWork belirli bir örneğiyle eşlediğinden, bunların hiçbirine BackgroundWorkerdoğrudan başvurmamalısınız. Bunun yerine, parametresini sender olay işleyicinizde yayınlayarak öğesine BackgroundWorker erişmeniz DoWork gerekir.
Olay işleyicinizdeki DoWork kullanıcı arabirimi nesnelerini işlememeye dikkat etmelisiniz. Bunun yerine, olaylar aracılığıyla kullanıcı arabirimiyle BackgroundWorker iletişim kurun.
Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.