別ThreadからのUI操作について
- 題名: 別ThreadからのUI操作について
- 著者: えい
- 日時: 2013/07/23 19:11:21
- ID: 31731
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 別ThreadからのUI操作について
- 著者: 魔界の仮面弁士
- 日時: 2013/07/23 19:44:10
- ID: 31732
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 別ThreadからのUI操作について
- 著者: えい
- 日時: 2013/07/24 15:19:13
- ID: 31733
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
【解決したい問題】
初めての投稿です。至らない点等あるかと思いますが、よろしくお願いいたします。
早速ですが、以下のコードについて質問させていただきます。
処理:ボタンを押したらDBを読み込む
目標:この処理に数分時間がかかるため、処理中、Threading.Timerを使用して一定時間ごとにプログレスバーを動かす
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim timerDelegate As New Threading.TimerCallback(AddressOf MyClock)
Dim timer As New Threading.Timer(timerDelegate, Nothing, 0, 1000)
Call selectDB() 'DBを読み込む処理
End Sub
Delegate Sub SetProgressBarDelegate()
Private Sub SetProgressBar()
Console.WriteLine("C")
ProgressBar1.Value += 10
End Sub
Public Sub MyClock(ByVal o As Object)
Console.WriteLine("A")
Me.Invoke(New SetProgressBarDelegate(AddressOf SetProgressBar))
Console.WriteLine("B")
End Sub
問題:SetProgressBar()が一度も実行されないため、プログレスバーは動きません。
詳細:デバッグにより、以下がわかっています。
Console.WriteLine("A")は一定時間ごとに実行されています。
Console.WriteLine("B")は1回も実行されません。
Console.WriteLine("C")は1回も実行されません。
よって、Me.InvokeにてMyClock()の処理が止まっている(Me.InvokeにてMyClock()を抜けている)と推測されます。
selectDB() の処理は順調に進みます。
コードより、目標の達成を妨げている要因が特定できれば、ご教授頂けますでしょうか?
よろしくお願いいたします。