HIRO's.NET

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

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

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

HIRO's.NET RSSHIRO's.NET RSS


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

HOME > C# 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 void Form1_Load(object sender, EventArgs e)
{
    //バックグラウンド操作をキャンセルできるようにする
    this.backgroundWorker1.WorkerSupportsCancellation = true;

}

//バックグランド処理実行用ボタンクリック時の処理
private void button1_Click(object sender, EventArgs e)
{
    //バックグラウンド操作の実行を開始する
    this.backgroundWorker1.RunWorkerAsync();
}

//バックグランドキャンセル用ボタンクリック時の処理
private void button2_Click(object sender, EventArgs e)
{
    if (this.backgroundWorker1.IsBusy)
        //バックグランド処理をキャンセルする
        this.backgroundWorker1.CancelAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    //バックグラウンドで実行する処理をここに記述します

    for (int i = 0; i < 1000; i++)
    {
        //処理中にキャンセルされていないかを定期的にチェックする
        if (this.backgroundWorker1.CancellationPending)
        {
            e.Cancel = true;
            return;
        }

        System.Threading.Thread.Sleep(100);
    }
}