Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net backgroundworker未更新Progressbar_Vb.net - Fatal编程技术网

Vb.net backgroundworker未更新Progressbar

Vb.net backgroundworker未更新Progressbar,vb.net,Vb.net,我试图让进度条显示当前的进度,但由于某些原因,进度条只是显示在那里,什么也没有发生。我正在使用以下代码 Private Sub BuildApp_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BuildApp.ProgressChanged Me.ProgressBar1.Value = e.ProgressPercentage End Sub 我检查了后台工作人员的属性是否设置

我试图让进度条显示当前的进度,但由于某些原因,进度条只是显示在那里,什么也没有发生。我正在使用以下代码

Private Sub BuildApp_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BuildApp.ProgressChanged
        Me.ProgressBar1.Value = e.ProgressPercentage
End Sub

我检查了后台工作人员的属性是否设置为“报告状态”,是否设置为“是”。另外,我检查了进度条的样式,它被设置为块。有什么帮助吗?

这里有一个简单的例子

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        BuildApp.RunWorkerAsync()
    End Sub

    Private Sub BuildApp_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BuildApp.DoWork
        Dim someTotal As Integer = 12
        For x As Integer = 1 To someTotal
            System.Threading.Thread.Sleep(1000) ' simulated work
            BuildApp.ReportProgress(x / someTotal * 100) ' pass the current percentage value
        Next
    End Sub

    Private Sub BuildApp_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BuildApp.ProgressChanged
        Me.ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub BuildApp_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BuildApp.RunWorkerCompleted
        MessageBox.Show("Done!")
        Button1.Enabled = True
    End Sub

End Class

这里有一个简单的例子

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        BuildApp.RunWorkerAsync()
    End Sub

    Private Sub BuildApp_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BuildApp.DoWork
        Dim someTotal As Integer = 12
        For x As Integer = 1 To someTotal
            System.Threading.Thread.Sleep(1000) ' simulated work
            BuildApp.ReportProgress(x / someTotal * 100) ' pass the current percentage value
        Next
    End Sub

    Private Sub BuildApp_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BuildApp.ProgressChanged
        Me.ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub BuildApp_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BuildApp.RunWorkerCompleted
        MessageBox.Show("Done!")
        Button1.Enabled = True
    End Sub

End Class

在DoWork()处理程序中,您需要调用ReportProgress()并将当前百分比值传递给它。你在这么做吗?…这意味着我需要在我的bg worker中的每次操作后手动键入一个值?@KrešimirČulina是的-后台工作人员无法神奇地确定剩余的工作量!确切地说……程序不知道“进度”对您的特定应用程序意味着什么。每当需要更新ProgressBar时,都必须手动调用ReportProgress()。每次调用ReportProgress()都会导致相应的ProgressChanged()事件触发。您能否向我们展示DoWork()的代码?在DoWork()处理程序中,您需要调用ReportProgress()并将当前的百分比值传递给它。你在这么做吗?…这意味着我需要在我的bg worker中的每次操作后手动键入一个值?@KrešimirČulina是的-后台工作人员无法神奇地确定剩余的工作量!确切地说……程序不知道“进度”对您的特定应用程序意味着什么。每当需要更新ProgressBar时,都必须手动调用ReportProgress()。对ReportProgress()的每次调用都会导致相应的ProgressChanged()事件触发。您可以向我们展示DoWork()的代码吗?如果您没有像上面的示例那样的好循环作为百分比的基础,那么您只需手动放置ReportProgress()使用适当的值在适当的位置调用代码。如果很难估计总时间,则使用动画gif。如果您对具体进度没有很好的“适合”,那么只需将ProgressBar Style()属性设置为Marquee。与动画GIF相同…如果您没有像上面示例中那样的好循环作为百分比的基础,那么您只需手动将ReportProgress()调用放置在代码中具有适当值的适当位置。或者,如果很难估计总时间,则只需使用动画GIF。如果您对具体进度没有很好的“适合”,那么只需将ProgressBar Style()属性设置为Marquee。和动画GIF一样。。。