【问题标题】:Trigger Backgroundworker Completed event触发 Backgroundworker Completed 事件
【发布时间】:2010-06-17 19:30:13
【问题描述】:

我正在尝试以单独的形式 (progressForm) 显示进度条 (marque),同时我在后台进行一些计算。

我知道典型的做法是在后台工作人员中包含计算并在主线程中显示progressForm。这种方法会在我的应用程序中导致很多同步问题,因此我在后台工作进程中使用progressForm.ShowDialog() 显示progressForm。但我需要在应用程序中触发 Completed 事件以关闭表单。

这可能吗?

提前致谢。

【问题讨论】:

    标签: vb.net progress-bar background-process


    【解决方案1】:

    一旦您的后台工作人员的进度达到 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
    

    【讨论】:

    • 这是不准确的说法。 RunWorkerCompleted 事件也会在 DoWork 退出时触发,即使您没有报告任何进度。实际上,当 DoWork 退出时,ProgressChanged 会自动触发,progress = 100%。
    • 更新:这是错误的陈述。如果您在 DoWork 退出之前将进度报告为 100% - RunWorkerCompleted 事件将不会触发。 RunWorkerCompleted 事件将在 DoWork 退出时触发,并且您是否报告任何进度都没有关系。事实上,当 DoWork 退出时,ProgressChanged 将自动触发,progress = 100%。我现在已经用 C++ 自己测试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多