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.
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
Açıklamalar
Yöntemini çağırdığınızda RunWorkerAsync bu olay oluşturulur. Burada, zaman alıcı olabilecek işleri gerçekleştiren işlemi başlatırsınız.
Olay işleyicisindeki DoWork kodunuz, özellik değerini düzenli aralıklarla denetlemeli CancellationPending ve ise true
işlemi durdurmalıdır. Bu durumda bayrağını CancelSystem.ComponentModel.DoWorkEventArgstrue
olarak ayarlayabilirsiniz ve Cancelled olay işleyicinizdeki RunWorkerCompleted bayrağı System.ComponentModel.RunWorkerCompletedEventArgs olarak ayarlanır.true
Dikkat
Olay işleyicisindeki kodunuzun DoWork iptal isteği yapılırken çalışmasını bitirebileceğini ve yoklama döngünüzün olarak ayarlanmasını true
kaçı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 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 özellik olay RunWorkerCompleted 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ğine BackgroundWorkereşlediğinden, bunlardan hiçbirine doğrudan başvurmamalısınız. Bunun yerine, olay işleyicinizde parametresini sender
yayınlayarak öğesine BackgroundWorker erişmeniz DoWork gerekir.
Olay işleyicinizdeki DoWork hiçbir kullanıcı arabirimi nesnesini 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.