■102263 / ) |
Re[2]: 時間のかかる処理の進行状況の表示について |
□投稿者/ ゆい (25回)-(2023/08/09(Wed) 17:56:36)
|
■No102261 (WebSurfer さん) に返信
> 以下は質問に対する直接的な答えではないです。
とのことですが、、DisableAllButtons()とEableAllButtons()は、
「宣言されていません。アクセスできない保護レベルになっています。」が出ましたので削除はしましたが正常に動きました。
おっしゃるように、短文でもありますのでこちらの方が良さそうです。
----------------------------------------------------
Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'DisableAllButtons() '<--- 宣言されていません。アクセスできない保護レベルになっています。
Label1.Text = "処理中…" ' ToolStripStatusLabel1.Text = "処理中…"
ProgressBar1.Value = 0 'ToolStripProgressBar1.Value = 0
' Progressクラスのインスタンスを生成
Dim p = New Progress(Of Integer)(AddressOf ShowProgress)
' 時間のかかる処理を別スレッドで開始
Dim result As String = Await Task.Run(Function() DoWork(p, 100))
' 処理結果の表示
Label1.Text = result ' ToolStripStatusLabel1.Text = result
ProgressBar1.Value = 100 ' ToolStripProgressBar1.Value = 100
MessageBox.Show("正常に完了")
'EableAllButtons() '<--- 宣言されていません。アクセスできない保護レベルになっています。
End Sub
' 進捗を表示するメソッド(これはUIスレッドで呼び出される)
Private Sub ShowProgress(percent As Integer)
Label1.Text = percent & "%完了"
ProgressBar1.Value = percent
End Sub
' 時間のかかる処理を行うメソッド(進捗付き)
Private Function DoWork(progress As IProgress(Of Integer), n As Integer) As String
' 別スレッドで実行されるため、このメソッドでは
' UI(コントロール)を操作してはいけない
' 時間のかかる処理
For i As Integer = 0 To n - 1
System.Threading.Thread.Sleep(100)
Dim percentage As Integer = i * 100 \ n ' 進捗率
progress.Report(percentage)
Next
' このメソッドからの戻り値
Return "全て完了"
End Function
|
|