在我的应用程序启动期间,我正在进行长时间的数据库升级。在此开始之前,我展示了一个带有进度条的表单,以便用户知道正在发生某些事情并且他应该等待。
为了不阻止重绘进度条,我在后台工作人员中进行数据库升级。
代码如下所示:
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 秒以来没有消息(我猜你知道这个错误)。
但是由于后台工作人员是为此目的而设计的,所以我认为我在这里做错了什么,但我不知道是什么。
另外,我的进度条没有重绘。
有人可以帮忙吗?非常感谢你!