我有一个后台流程:
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()
完成之前,进度条甚至都没有开始。
有人可以帮我解决这个问题吗?
非常感谢。感谢。
答案 0 :(得分:0)
你在每次迭代中从1到10循环调用CheckForInternetConnection()
,这没有意义。在这种情况下,长时间运行的进程是CheckForInternetConnection()
方法,因此您需要在方法执行时以某种方式“报告进度”。
当我们无法计算进程的进度百分比时,通过 indeterminate 模式使用进度条(通过设置Style
to Marquee
in WinForm或设置{},通知用户程序正在处理某些内容的可能方法{3}})。