C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 178 を表示中)
■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

返信 編集キー/


管理者用

- Child Tree -