BackgroundWorker.DoWork イベント
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
RunWorkerAsync() が呼び出されたときに発生します。
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
イベントの種類
例
次のコード例では、 イベントを使用して DoWork 非同期操作を開始する方法を示します。 このコード例は、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.
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
注釈
このイベントは、 メソッドを呼び出すと発生します RunWorkerAsync 。 ここで、時間のかかる可能性のある作業を実行する操作を開始します。
イベント ハンドラーのDoWorkコードでは、プロパティ値を定期的にチェックCancellationPendingし、 の場合はtrue
操作を中止する必要があります。 この場合は、 のSystem.ComponentModel.DoWorkEventArgsフラグを Cancel にtrue
Cancelled設定できます。イベント ハンドラーの のSystem.ComponentModel.RunWorkerCompletedEventArgsRunWorkerCompletedフラグは にtrue
設定されます。
注意事項
イベント ハンドラー内のDoWorkコードは、取り消し要求が行われると処理が完了する可能性があり、ポーリング ループが にtrue
設定されていない可能性があることにCancellationPending注意してください。 この場合、キャンセル要求がCancelled行われた場合でも、イベント ハンドラー内RunWorkerCompletedの の System.ComponentModel.RunWorkerCompletedEventArgs フラグは にtrue
設定されません。 この状況は 競合状態 と呼ばれ、マルチスレッド プログラミングでは一般的な懸念事項です。 マルチスレッド設計の問題の詳細については、「 マネージド スレッドのベスト プラクティス」を参照してください。
操作によって結果が生成される場合は、結果を プロパティに DoWorkEventArgs.Result 割り当てることができます。 これは、 プロパティの RunWorkerCompleted イベント ハンドラーで RunWorkerCompletedEventArgs.Result 使用できます。
操作によって、コードで処理されない例外が発生した場合、 BackgroundWorker によって例外がキャッチされ、イベント ハンドラーにRunWorkerCompleted渡されます。ここで、 の System.ComponentModel.RunWorkerCompletedEventArgsプロパティとしてError公開されます。 Visual Studio デバッガーで実行している場合、ハンドルされない例外が発生したイベント ハンドラーの時点で DoWork デバッガーが中断します。 複数BackgroundWorkerの がある場合は、イベント ハンドラーを の特定のインスタンスBackgroundWorkerに結合DoWorkするため、それらのいずれも直接参照しないでください。 代わりに、イベント ハンドラーで パラメーターをキャストして、 sender
にアクセスBackgroundWorkerするDoWork必要があります。
イベント ハンドラーでユーザー インターフェイス オブジェクトを操作しないように注意する DoWork 必要があります。 代わりに、BackgroundWorker のイベントを通じてユーザー インターフェイスと通信します。
イベントを処理する方法の詳細については、次を参照してください。処理とイベントの発生します。
適用対象
こちらもご覧ください
.NET