前提・実現したいこと
非同期処理時にプログレスバーとかを更新したい。
一応、現在のコードでそれっぽく動いているのですが
思い付きでの構成のため、これが普通なのかよくわかっていません。
他のやり方などあれば教えて下さい。
現在のコード
開始用のbrnStartボタン
キャンセル用のbtnCancelボタン
プログレスバーを更新する為のTimer1コントロール
プログレスバーのProgressBar1
をFormにセットして以下のようなコードで実装しています。
VBNET
1 2Public Class Form1 3 4 Private m_Count As Long 5 6 Private Sub brnStart_Click(sender As Object, e As EventArgs) Handles brnStart.Click 7 8 ProgressBar1.Maximum = 20 9 ProgressBar1.Minimum = 0 10 ProgressBar1.Value = 0 11 12 Timer1.Interval = 1000 13 Timer1.Start() 14 m_Count = 0 15 16 Dim t As Task = Task.Run( 17 Sub() 18 何か重い処理() 19 End Sub) 20 21 End Sub 22 23 Private Sub 何か重い処理() 24 For i = 0 To 20 25 System.Threading.Thread.Sleep(2000) 26 If m_Count < 0 Then 27 Exit Sub 28 End If 29 m_Count = m_Count + 1 30 Next 31 m_Count = -1 32 End Sub 33 34 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 35 If m_Count < 0 Then 36 Timer1.Stop() 37 If m_Count = -1 Then 38 MsgBox("処理完了") 39 End If 40 Exit Sub 41 End If 42 ProgressBar1.Value = m_Count 43 End Sub 44 45 Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click 46 If MsgBox("キャンセルしますか?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then 47 m_Count = -2 48 End If 49 End Sub 50End Class 51
補足情報(FW/ツールのバージョンなど)
Visual Studio 2015
追記
ついでにコメントでキャンセル時の処理の仕方も質問してしまいました。
コメントにて、そのUrlの紹介を頂いています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/29 09:25
2021/12/29 10:05
退会済みユーザー
2021/12/29 12:01
2021/12/29 13:47 編集