BackgroundWorker.DoWork Olay

Tanım

Ç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 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 kodunuzun DoWork iptal isteği yapılırken çalışmasını bitirebileceğ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 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.

Şunlara uygulanır

Ayrıca bkz.