我正在尝试以单独的形式(progressForm)显示进度条(marque),同时我在后台进行一些计算。
我知道这样做的典型方法是在后台工作人员中包含计算并在主线程中显示progressForm。这种方法会在我的应用程序中导致很多同步问题,因此我progressForm.ShowDialog()
在后台工作进程中显示了 progressForm 。但我需要在应用程序中触发 Completed 事件以关闭表单。
这可能吗?
提前致谢。
我正在尝试以单独的形式(progressForm)显示进度条(marque),同时我在后台进行一些计算。
我知道这样做的典型方法是在后台工作人员中包含计算并在主线程中显示progressForm。这种方法会在我的应用程序中导致很多同步问题,因此我progressForm.ShowDialog()
在后台工作进程中显示了 progressForm 。但我需要在应用程序中触发 Completed 事件以关闭表单。
这可能吗?
提前致谢。
一旦您的后台工作人员的进度达到 100%,后台工作人员的 RunWorkerCompleted 事件就会触发。
编辑- 添加代码示例
Dim WithEvents bgWorker As New BackgroundWorker With { _
.WorkerReportsProgress = True, _
.WorkerSupportsCancellation = True}
Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
For i As Integer = 0 To 100
'Threw in the thread.sleep to illustrate what's going on. Otherwise, it happens too fast.
Threading.Thread.Sleep(250)
bgWorker.ReportProgress(i)
Next
End Sub
Private Sub bgWorker_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged
If e.ProgressPercentage Mod 10 = 0 Then
MsgBox(e.ProgressPercentage.ToString)
End If
End Sub
Private Sub bgWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted
MsgBox("Done")
End Sub