后台进程挂起应用程序vb.net

时间:2014-06-09 13:52:06

标签: vb.net progress-bar backgroundworker

我有一个后台流程:

Public Shared Function CheckForInternetConnection() As Boolean
    Try
        Using client = New WebClient()
            Using stream = client.OpenRead("http://www.google.com")
                Return True
            End Using
        End Using
    Catch
        Return False
    End Try
End Function

此过程占用我的应用程序,导致它挂起直到完成。

我正在尝试将其合并到“BackGroundWorker”中并将其绑定到进度条。

但是,虽然应用程序在进程运行时不再挂起,但进度条会停止。

我希望在上述功能期间从0到50%的进度进展,但是目前,进度条位于0%,直到过程完成,它们跳到50%。

Private Sub bgwLongTask_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwLongTask.DoWork
    For i As Integer = 1 To 10
        ' If we should stop, do so.
        If (bgwLongTask.CancellationPending) Then
            ' Indicate that the task was canceled.
            e.Cancel = True
            Exit For
        End If

        CheckForInternetConnection()
        LoadingScreen.CheckForIllegalCrossThreadCalls = False
        Me.Text = i

        ' Notify the UI thread of our progress.
        bgwLongTask.ReportProgress(i * 10)
    Next i
End Sub

Private Sub bgwLongTask_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwLongTask.ProgressChanged
    If e.ProgressPercentage >= 0% And e.ProgressPercentage <= 50% Then
        lblStatus.Text = "Checking Netowrk ..."
    Else
        lblStatus.Text = "Loading ..."
    End If
    prgPercentComplete.Value = e.ProgressPercentage
End Sub

使用:

LoadingScreen.CheckForIllegalCrossThreadCalls = False
Me.Text = i

我可以看到,在CheckForInternetConnection()完成之前,进度条甚至都没有开始。

有人可以帮我解决这个问题吗?

非常感谢。感谢。

1 个答案:

答案 0 :(得分:0)

你在每次迭代中从1到10循环调用CheckForInternetConnection(),这没有意义。在这种情况下,长时间运行的进程是CheckForInternetConnection()方法,因此您需要在方法执行时以某种方式“报告进度”。

当我们无法计算进程的进度百分比时,通过 indeterminate 模式使用进度条(通过设置Style to Marquee in WinForm或设置{},通知用户程序正在处理某些内容的可能方法{3}})。