■102260 / inTopicNo.1) |
時間のかかる処理の進行状況の表示について |
□投稿者/ ゆい (24回)-(2023/08/09(Wed) 12:59:59)
|
分類:[VB.NET/VB2005 以降]
いつも初歩的なことばかりですみません。
下のはhttps://dobon.net/vb/dotnet/programing/displayprogress.htmlにあったのを見させていただいたものです。
この中の
> '1秒間待機する(時間のかかる処理があるものとする)
> System.Threading.Thread.Sleep(1000)
を、、
System.Threading.Thread.Sleep(1000)
System.Threading.Thread.Sleep(1000)
System.Threading.Thread.Sleep(1000)
のように3回繰り返し、1回終る毎に進行状況表示が3分の1づつ増え、3回目で終わるにはどのようにすれば良いのか教えてください。
ここではFor i = 1 To maxLoopsで進行状況表示がされています。
よろしくお願いします。
-----------------------------------------------------------
'Button1のClickイベントハンドラ
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
'処理が行われているときは、何もしない
If BackgroundWorker1.IsBusy Then
Return
End If
'Button1を無効にする
Button1.Enabled = False
'コントロールを初期化する
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = 10
ProgressBar1.Value = 0
Label1.Text = "0"
'BackgroundWorkerのProgressChangedイベントが発生するようにする
BackgroundWorker1.WorkerReportsProgress = True
'DoWorkで取得できるパラメータ(10)を指定して、処理を開始する
'パラメータが必要なければ省略できる
BackgroundWorker1.RunWorkerAsync(10)
End Sub
'BackgroundWorker1のDoWorkイベントハンドラ
'ここで時間のかかる処理を行う
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim bgWorker As BackgroundWorker = DirectCast(sender, BackgroundWorker)
'パラメータを取得する
Dim maxLoops As Integer = CInt(e.Argument)
'時間のかかる処理を開始する
Dim i As Integer
For i = 1 To maxLoops
'1秒間待機する(時間のかかる処理があるものとする)
System.Threading.Thread.Sleep(1000)
'ProgressChangedイベントハンドラを呼び出し、
'コントロールの表示を変更する
bgWorker.ReportProgress(i)
Next
'ProgressChangedで取得できる結果を設定する
'結果が必要なければ省略できる
e.Result = maxLoops
End Sub
'BackgroundWorker1のProgressChangedイベントハンドラ
'コントロールの操作は必ずここで行い、DoWorkでは絶対にしない
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'ProgressBar1の値を変更する
ProgressBar1.Value = e.ProgressPercentage
'Label1のテキストを変更する
Label1.Text = e.ProgressPercentage.ToString()
End Sub
'BackgroundWorker1のRunWorkerCompletedイベントハンドラ
'処理が終わったときに呼び出される
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
If Not e.Error Is Nothing Then
'エラーが発生したとき
Label1.Text = "エラー:" & e.Error.Message
Else
'正常に終了したとき
'結果を取得する
Dim result As Integer = CInt(e.Result)
Label1.Text = result.ToString() & "回で完了しました。"
End If
'Button1を有効に戻す
Button1.Enabled = True
End Sub
|
|