VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
バックグラウンド操作のキャンセルするは、下記手順で行います。
1.WorkerSupportsCancellationプロパティをtrueにします。(規定値はfalse)
このプロパティをTrueにしないとキャンセルを受け付けることができません。
2.CancelAsyncメソッドを呼び出します。
これによって、BackgroundWorkerコンポーネントのCancellationPendingプロパティがtrueに設定されます。
3.重い処理を行っている場合は、CancellationPending に true を設定し損ねる場合があるため、定期的にチェックして、trueになっていれば「e.Cancel」をtrueに設定して、DoWorkイベント・ハンドラを抜けることができるようにします。
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'バックグラウンド操作をキャンセルできるようにする Me.BackgroundWorker1.WorkerSupportsCancellation = True End Sub 'バックグランド処理実行用ボタンクリック時の処理 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'バックグラウンド操作の実行を開始する Me.BackgroundWorker1.RunWorkerAsync() End Sub 'バックグランドキャンセル用ボタンクリック時の処理 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If Me.BackgroundWorker1.IsBusy Then 'バックグランド処理をキャンセルする Me.BackgroundWorker1.CancelAsync() End If End Sub Private Sub BackgroundWorker1_DoWork( _ ByVal sender As Object, _ ByVal e As System.ComponentModel.DoWorkEventArgs) _ Handles BackgroundWorker1.DoWork 'バックグラウンドで実行する処理をここに記述します For I As Integer = 0 To 1000 '処理中にキャンセルされていないかを定期的にチェックする If Me.BackgroundWorker1.CancellationPending Then e.Cancel = True Return End If System.Threading.Thread.Sleep(100) Next End Sub