我为我的应用程序实现了一个 BGW,希望加快启动窗口的加载时间(40 多个控件)
我不会发布我的整个代码,因为它太长了,但会给你代码的要点。我将需要时间才能完成的大函数调用与少数控件分开,并将它们移到 BGW 中,希望异步加载控件以帮助加快进程。
据了解,我必须将 UI 更改代码移动到 ProgressChanged 事件或 RunWorkerCompleted 事件,我已经这样做了。我最初将所有代码都扔到 DoWork 事件中,它非常快,但发现它不安全,所以我对其进行了重新设计,以将所有与 UI 相关的 oode 移动到 ProgressChanged。现在几乎没有那么快了,而且 BGW 控件似乎要等到 UI 线程完成后再更改 BGW_ProgressCHanged 事件中的控件。当我对 DoWork 进行所有更改时,我从未见过两者之间的这种“滞后”。我能做些什么呢?或者我至少可以让 BGW 实时更新控件,而不是在更新所有控件之前等待所有控件完成?
响应速度较低,并且会锁定窗口以等待 BGW 控件更新。只是寻找可能发生的事情
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
SyncLock <globalVar>
BackgroundWorker1.ReportProgress(0, "Tom")
End SyncLock
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
Dim value As String = DirectCast(e.UserState, String)
Select Case e.ProgressPercentage
Case 0
lblName.text = value
lblName.Visible = true
End Select
End Sub