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 メニュー

04.バックグラウンド処理の終了を判断する

UPDATE:2007/03/15 

<< 前のTips  次のTips >>

 

 バックグラウンド処理が終了すると、RunWorkerCompletedイベントが発生します。(このイベントは、バックグラウンド処理が正常終了、例外発生時、バックグラウンド処理のキャンセル時のいずれかで発生します)
 イベントのe.errorがnull以外は例外が発生したことを示し、e.Cancelledプロパティがtrueの場合はバックグラウンド処理がキャンセルされたことを示します。

 
サンプル
private void Form1_Load(object sender, EventArgs e)
{
    //進捗状況を報告できるようにする
    this.backgroundWorker1.WorkerReportsProgress = true;
    //バックグラウンド操作をキャンセルできるようにする
    this.backgroundWorker1.WorkerSupportsCancellation = true;
    //プログレスバーの初期化
    this.progressBar1.Minimum = 0;
    this.progressBar1.Maximum = 100;
}

//バックグランド処理実行用ボタンクリック時の処理
private void button1_Click(object sender, EventArgs e)
{
    //進捗状況の初期化
    this.progressBar1.Value = 0;

    //バックグラウンド操作の実行を開始する
    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 < 100; i++)
    {
        //処理中にキャンセルされていないかを定期的にチェックする
        if (this.backgroundWorker1.CancellationPending)
        {
            e.Cancel = true;
            return;
        }

        //進捗状況の報告
        this.backgroundWorker1.ReportProgress(i);

        if (i == 50)
            throw new ApplicationException("例外発生");

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

//バックグラウンド操作の進捗状況を把握
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    //進捗状況をプログレスバーに表示
    this.progressBar1.Value = e.ProgressPercentage;
}

//バックグラウンド処理の終了を判断する
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        MessageBox.Show("例外が発生しました");
    }
    else if (e.Cancelled)
    {
        MessageBox.Show("キャンセルされました");
    }
    else
    {
        MessageBox.Show("正常終了しました");
    }
}