Aracılığıyla paylaş


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.
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.

Şunlara uygulanır

Ayrıca bkz.