Sdílet prostřednictvím


BackgroundWorker.DoWork Událost

Definice

Nastane, když RunWorkerAsync() je volána.

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 

Event Type

Příklady

Následující příklad kódu ukazuje použití DoWork události ke spuštění asynchronní operace. Tento příklad kódu je součástí většího příkladu uvedeného pro třídu BackgroundWorker.

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

Poznámky

Tato událost se vyvolá při volání RunWorkerAsync metody. Tady spustíte operaci, která provádí potenciálně časově náročnou práci.

Kód v obslužné DoWork rutině události by měl pravidelně kontrolovat CancellationPending hodnotu vlastnosti a přerušit operaci, pokud je true. Pokud k tomu dojde, můžete nastavit příznak na , a Cancelled příznak System.ComponentModel.RunWorkerCompletedEventArgs v RunWorkerCompleted obslužné rutině události bude nastaven na true.trueSystem.ComponentModel.DoWorkEventArgsCancel

Upozornění

Mějte na paměti, že váš kód v DoWork obslužné rutině události může dokončit svou práci při vytváření požadavku na zrušení a smyčka dotazování může chybět CancellationPending nastavena na true. V takovém případě Cancelled nebude příznak System.ComponentModel.RunWorkerCompletedEventArgs obslužné RunWorkerCompleted rutiny události nastaven na true, i když byla provedena žádost o zrušení. Tato situace se nazývá stav časování a je běžným zájmem o vícevláknové programování. Další informace o problémech s návrhem vícevláknového formátování najdete v tématu Osvědčené postupy pro spravované vlákno.

Pokud vaše operace vytvoří výsledek, můžete výsledek přiřadit k DoWorkEventArgs.Result vlastnosti. Tato možnost bude k dispozici obslužné RunWorkerCompleted rutině RunWorkerCompletedEventArgs.Result události ve vlastnosti.

Pokud operace vyvolá výjimku, kterou váš kód nezpracuje, BackgroundWorker zachytí výjimku a předá ji do RunWorkerCompleted obslužné rutiny události, kde je vystavena jako Error vlastnost System.ComponentModel.RunWorkerCompletedEventArgs. Pokud používáte ladicí program sady Visual Studio, ladicí program se přeruší v okamžiku DoWork obslužné rutiny události, kde byla vyvolána neošetřená výjimka. Pokud máte více než jeden BackgroundWorker, neměli byste odkazovat přímo na žádné z nich, protože by to spojení obslužné DoWork rutiny události s konkrétní instancí BackgroundWorker. Místo toho byste měli přistupovat k BackgroundWorker parametru přetypováním parametru sender v DoWork obslužné rutině události.

Při manipulaci s objekty uživatelského rozhraní v DoWork obslužné rutině události musíte být opatrní. Místo toho komunikujte s uživatelským rozhraním prostřednictvím BackgroundWorker událostí.

Další informace o zpracování událostí naleznete v tématu Zpracování a vyvolávání událostí.

Platí pro

Viz také