Web服务调用-BackGroundWorker未按预期的VB.NET运行的进度条

Web服务调用-BackGroundWorker未按预期的VB.NET运行的进度条,vb.net,web-services,Vb.net,Web Services,我正在VB.NET中创建一个应用程序,用户可以通过OpenFileDialog附加XML并在Web服务中启动它 我希望在底部有一个进度条,因为此时GUI挂起,用户认为它在等待响应时崩溃了 我的代码如下: Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click BackgroundWorker1.RunWorkerAsync() End Sub Private Sub Back

我正在VB.NET中创建一个应用程序,用户可以通过OpenFileDialog附加XML并在Web服务中启动它

我希望在底部有一个进度条,因为此时GUI挂起,用户认为它在等待响应时崩溃了

我的代码如下:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    BackgroundWorker1.RunWorkerAsync()

End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    For I = 0 To 100 'Telling the program to count from 0 - 200

        If hubURLtxtbx.Text = "LIVE" Then
            XStreamLive()
        Else
            XStreamUAT()
        End If

        If BackgroundWorker1.CancellationPending = True Then
            e.Cancel = True
            Exit For
        Else
            'Telling the program to report the progress done by the ReportProgress
            BackgroundWorker1.ReportProgress(I)
            'Telling the program to stop after advancing one integer for 1 second.
            System.Threading.Thread.Sleep(1000)
        End If

    Next
End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, _
ByVal e As System.ComponentModel.ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged

        ProgBar.Value = e.ProgressPercentage

End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
    ProgBar.Value = 100
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    BackgroundWorker1.CancelAsync()
    BackgroundWorker1.Dispose()
End Sub
基本上,在代码如上所述的情况下,在我收到来自web服务的XML响应后,进度条正在更新

我想让它这样做,通话时,通话的进展是更新,然后当通话成功时,酒吧是完全满的

有人能帮我解释一下吗

干杯

詹姆斯

更新

好的,我修改了一些代码,现在当XML返回时,进度条最大值为100,但它仍然冻结GUI,并且从我单击按钮的那一刻起不会“增加”,当收到XML时,它会一次性填充进度条

更新代码

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

    BackgroundWorker1.RunWorkerAsync()

    If hubURLtxtbx.Text = "LIVE" Then
        XStreamLive()
    Else
        XStreamUAT()
    End If

End Sub

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, _
ByVal e As System.ComponentModel.ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged

    If GlobalVariables.response = "" Then
        ProgBar.Value = e.ProgressPercentage
    Else
        ProgBar.Value = 100
    End If

End Sub

我将sub移动到BackGroundWorker的dowwork中,因为服务没有返回处理数据的“状态”,所以我可以将任何内容返回到我的变量以更新进度条

因此,我决定使用字幕进度条样式来显示GUI正在做一些事情,然后在流程结束时100%使用连续样式来显示它已经完成

J

我猜XStreamLive()和XStreamUAT()是执行上传的地方。如果是这样,则在GUI线程上运行它们,而不是将它们卸载到后台工作程序。这意味着在上传完成之前,GUI不会更新。作为旁注,您需要进度条来实际显示完成百分比,还是仅仅指示GUI正忙?