アプリの起動中に、長いデータベースのアップグレードを行っています。それが始まる前に、進行状況バーのあるフォームを表示して、ユーザーが何かが起こっていることを認識し、待つ必要があることを確認します。
プログレスバーの再描画をブロックしないために、バックグラウンドワーカーでデータベースのアップグレードを行います。
コードは次のようになります。
frmMain_Load(...)
Dim wait As New frmWait
wait.Show()
Dim bw As New frmBWRebuildUserData
bw.Start()
Do While Not bw.Done
System.Threading.Thread.Sleep(100)
Loop
'Okay, db update was done, now continue and show the main app window
私のfrmBWRebuildUserDataは次のようになります。
Public Class frmBWRebuildUserData
Private m_bDone As Boolean
Public ReadOnly Property Done() As Boolean
Get
Return m_bDone
End Get
End Property
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
modAppDB.RebuildUserDB()
End Sub
Public Sub Start()
Me.BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
m_bDone = True
End Sub
End Class
しかし、60秒後、VB.NETは60秒以降メッセージがなかったことを通知します(このエラーを知っていると思います)。
しかし、バックグラウンドワーカーはそのような目的を意図しているので、私はここでかなり間違ったことをしていると思いますが、何を理解することはできません。
また、プログレスバーが再描画されていません。
誰か助けてもらえますか?どうもありがとうございます!