■画面 |
■デザイナ |
※バックグラウンド処理中にキャンセル処理を行う場合は
バックグラウンドワーカーのWorkerSupportsCancellationプロパティをTrueに設定する。
Trueに設定されていない場合「this.backgroundWorker1.CancelAsync();」実行時にエラーとなる。
|
- using System;
- using System.ComponentModel;
- using System.Windows.Forms;
- namespace WindowsFormsApplication1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- // バックグラウンド処理メソッド追加
- //DoWork:メソッド追加
- this.backgroundWorker1.DoWork +=
- new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
- //ProgressChanged:メソッド追加
- this.backgroundWorker1.ProgressChanged +=
- new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
- //RunWorkerCompleted:メソッド追加
- this.backgroundWorker1.RunWorkerCompleted +=
- new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
- }
- //DoWork:バックグラウンドで実行される
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- //sender値取得
- BackgroundWorker bgw = (BackgroundWorker)sender;
-
- //何か重い処理
- for (long i = 0; i < 100000000000; i++)
- {
- //バックグラウンドで実行する処理
- //キャンセルボタンからCancelAsyncが実行された場合(キャンセル待ち待機)
- if (bgw.CancellationPending)
- {
- //処理中断
- return;
- }
- }
- }
-
- //ProgressChanged:バックグラウンド処理中に定期的に実行される
- private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
- {
- //プログレスバーの更新処理を記述
- }
- //RunWorkerCompleted:DoWork終了後に実行
- private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (false == e.Cancelled)
- {
- //処理終了時
- MessageBox.Show("処理終了");
- }
- else
- {
- //キャンセルボタンからCancelAsyncが実行された場合
- MessageBox.Show("実行中にキャンセルされました");
- }
- //プログレスバーの表示を戻す
- this.progressBar1.Style = ProgressBarStyle.Blocks;
- }
- //処理開始ボタン
- private void btnStart_Click(object sender, EventArgs e)
- {
- //プログレスバーをマーキー表示にする
- this.progressBar1.Style = ProgressBarStyle.Marquee;
- //バックグラウンド処理の開始
- this.backgroundWorker1.RunWorkerAsync();
- }
- //処理中止ボタン
- private void btnCancel_Click(object sender, EventArgs e)
- {
- //バックグラウンド処理の終了要求の送信
- //(CancelAsyncのみでは処理は中断されない)
- this.backgroundWorker1.CancelAsync();
- }
- }
- }
0 件のコメント:
コメントを投稿