| ■画面 | 
| ■デザイナ | 
| 
 ※バックグラウンド処理中にキャンセル処理を行う場合は
バックグラウンドワーカーの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 件のコメント:
コメントを投稿