Adsense

2015年8月23日日曜日

【C#】プログレスバーを表示する【マーキー表示編(進捗状況を出さない)】

■ソースコード
ダウンロード:http://www.geocities.jp/battlescouter/zip/ProgressBar1.zip
■画面
■デザイナ
※バックグラウンド処理中にキャンセル処理を行う場合は バックグラウンドワーカーのWorkerSupportsCancellationプロパティをTrueに設定する。 Trueに設定されていない場合「this.backgroundWorker1.CancelAsync();」実行時にエラーとなる。
■コード
  1. using System;
  2. using System.ComponentModel;
  3. using System.Windows.Forms;
  4. namespace WindowsFormsApplication1
  5. {
  6.     public partial class Form1 : Form
  7.     {
  8.         public Form1()
  9.         {
  10.             InitializeComponent();
  11.             // バックグラウンド処理メソッド追加
  12.             //DoWork:メソッド追加
  13.             this.backgroundWorker1.DoWork +=
  14.              new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
  15.             //ProgressChanged:メソッド追加
  16.             this.backgroundWorker1.ProgressChanged +=
  17.              new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
  18.             //RunWorkerCompleted:メソッド追加
  19.             this.backgroundWorker1.RunWorkerCompleted +=
  20.              new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
  21.         }
  22.         //DoWork:バックグラウンドで実行される
  23.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  24.         {
  25.             //sender値取得
  26.             BackgroundWorker bgw = (BackgroundWorker)sender;
  27.             
  28.             //何か重い処理
  29.             for (long i = 0; i < 100000000000; i++)
  30.             {
  31.                 //バックグラウンドで実行する処理
  32.                 //キャンセルボタンからCancelAsyncが実行された場合(キャンセル待ち待機)
  33.                 if (bgw.CancellationPending)
  34.                 {
  35.                     //処理中断
  36.                     return;
  37.                 }
  38.             }
  39.         }
  40.         
  41.         //ProgressChanged:バックグラウンド処理中に定期的に実行される
  42.         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
  43.         {
  44.             //プログレスバーの更新処理を記述
  45.         }
  46.         //RunWorkerCompleted:DoWork終了後に実行
  47.         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  48.         {
  49.             if (false == e.Cancelled)
  50.             {
  51.                 //処理終了時
  52.                 MessageBox.Show("処理終了");
  53.             }
  54.             else
  55.             {
  56.                 //キャンセルボタンからCancelAsyncが実行された場合
  57.                 MessageBox.Show("実行中にキャンセルされました");
  58.             }
  59.             //プログレスバーの表示を戻す
  60.             this.progressBar1.Style = ProgressBarStyle.Blocks;
  61.         }
  62.         //処理開始ボタン
  63.         private void btnStart_Click(object sender, EventArgs e)
  64.         {
  65.             //プログレスバーをマーキー表示にする
  66.             this.progressBar1.Style = ProgressBarStyle.Marquee;
  67.             //バックグラウンド処理の開始
  68.             this.backgroundWorker1.RunWorkerAsync();
  69.         }
  70.         //処理中止ボタン
  71.         private void btnCancel_Click(object sender, EventArgs e)
  72.         {
  73.             //バックグラウンド処理の終了要求の送信
  74.             //(CancelAsyncのみでは処理は中断されない)
  75.             this.backgroundWorker1.CancelAsync();
  76.         }
  77.     }
  78. }

0 件のコメント:

コメントを投稿