02.進捗状況値の取得/設定をする
進捗状況値の取得/設定を行うには Value プロパティを設定します。
Value プロパティに設定できる値の範囲は、最小値はMinimumプロパティの値、最大値はMaximumプロパティの値です。
下記は、[Start]ボタンがクリックされると Value 値が増加し、[Stop]ボタンがクリックされるか最大値に達するまでの間、進捗状況を表示し続ける例です。
この例に示したコードでは BackgroundWorker クラスを使用してバックグラウンドでProgressBarの進捗管理を行っています。
<ProgressBar Name="ProgressBar1" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="12,12,0,0" Height="16" Width="254" Minimum="0" Maximum="100" Value="0"/> <Button Content="START" Height="23" HorizontalAlignment="Left" Margin="12,34,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" /> <Button Content="STOP" Height="23" HorizontalAlignment="Right" Margin="0,34,110,0" Name="btnStop" VerticalAlignment="Top" Width="75" />
Private WithEvents Worker As System.ComponentModel.BackgroundWorker ' [START]ボタンクリック時の処理 Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnStart.Click '[START]/[STOP]ボタンの初期化 btnStart.IsEnabled = False btnStop.IsEnabled = True 'プログレスバーの現在値を0で初期化 ProgressBar1.Value = 0 Worker = New System.ComponentModel.BackgroundWorker '進捗状況の報告をできるようにする Worker.WorkerReportsProgress = True 'キャンセル処理をできるようにする Worker.WorkerSupportsCancellation = True 'バックグラウンド処理の実行 Worker.RunWorkerAsync() End Sub ' [STOP]ボタンクリック時の処理 Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnStop.Click If IsNothing(Worker) Then Return 'バックグラウンド処理をキャンセルする Worker.CancelAsync() MessageBox.Show(String.Format("現在値は{0}です", ProgressBar1.Value)) End Sub ' 時間のかかる処理を実行 Private Sub Worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Worker.DoWork For Value As Integer = 0 To 100 If Worker.CancellationPending Then Exit For End If Worker.ReportProgress(Value) '500mSecスリープ System.Threading.Thread.Sleep(100) Next End Sub ' 現在値の更新 Private Sub Worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Worker.ProgressChanged 'プログレスバーの現在値を更新する ProgressBar1.Value = e.ProgressPercentage End Sub ' 「時間のかかる処理」終了時の処理 Private Sub Worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Worker.RunWorkerCompleted '[START]/[STOP]ボタンの初期化 btnStart.IsEnabled = True btnStop.IsEnabled = False End Sub
System.ComponentModel.BackgroundWorker Worker; // [START]ボタンクリック時の処理 private void btnStart_Click(object sender, RoutedEventArgs e) { // [START]/[STOP]ボタンの初期化 btnStart.IsEnabled = false; btnStop.IsEnabled = true; // プログレスバーの現在値を0で初期化 progressBar1.Value = 0; Worker = new System.ComponentModel.BackgroundWorker(); // イベントの登録 Worker.DoWork += new System.ComponentModel.DoWorkEventHandler(Worker_DoWork); Worker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(Worker_ProgressChanged); Worker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted); // 進捗状況の報告をできるようにする Worker.WorkerReportsProgress = true; // キャンセル処理をできるようにする Worker.WorkerSupportsCancellation = true; // バックグラウンド処理の実行 Worker.RunWorkerAsync(); } // [STOP]ボタンクリック時の処理 private void btnStop_Click(object sender, RoutedEventArgs e) { if (Worker == null) return; // バックグラウンド処理をキャンセルする Worker.CancelAsync(); MessageBox.Show(String.Format("現在値は{0}です", progressBar1.Value)); } // 時間のかかる処理を実行 void Worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { for (int value = 1; value <= 100; value++) { if (Worker.CancellationPending) break; Worker.ReportProgress(value); // 500mSecスリープ System.Threading.Thread.Sleep(100); } } // 現在値の更新 void Worker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { // プログレスバーの現在値を更新する progressBar1.Value = e.ProgressPercentage; } // 「時間のかかる処理」終了時の処理 void Worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { // [START]/[STOP]ボタンの初期化 btnStart.IsEnabled = true; btnStop.IsEnabled = false; btnStart.IsEnabled = true; btnStop.IsEnabled = false; }
進捗状況の値を取得/設定するにはValueプロパティを使用する。