HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


VB.NET 2005の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > VB.NET 2005 Tips > コントロール > BackGroundWorker Tips メニュー

02.バックグラウンド操作をキャンセルする

UPDATE:2007/03/15 

<< 前のTips  次の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