我想使用BackgroundWorker實現一個進度條。VB.net - 使用BackgroundWorker的進度條
但進度條後第二隱藏自身,並沒有保持領先直到終點。不知道爲什麼。
下面是我的表單代碼:
Private Sub btnProgressBarPOC_Click(sender As Object, e As EventArgs) Handles btnProgressBarPOC.Click
BackgroundWorker = New BackgroundWorker()
BackgroundWorker.WorkerReportsProgress = True
autoResetEvent = New AutoResetEvent(False)
ProgressBar = New frmProgressBar(BackgroundWorker)
ProgressBar.ShowDialog()
autoResetEvent.WaitOne()
MsgBox("Main Done", vbInformation)
End Sub
Sub Processing() Handles BackgroundWorker.DoWork
BackgroundWorker.ReportProgress(33)
Threading.Thread.Sleep(5000)
BackgroundWorker.ReportProgress(66)
Threading.Thread.Sleep(5000)
BackgroundWorker.ReportProgress(100)
MsgBox("Background Done", vbInformation)
AutoResetEvent.Set()
End Sub
而下面是我的代碼在其中包含進度:
Imports System.ComponentModel
Public Class frmProgressBar
Private WithEvents _BGW As System.ComponentModel.BackgroundWorker
Private _TaskInProgress As String
Public WriteOnly Property TaskInProgress()
Set(value)
_TaskInProgress = value
_BGW.ReportProgress(1)
End Set
End Property
Public Sub New(ByVal BGW As System.ComponentModel.BackgroundWorker)
_BGW = BGW
InitializeComponent()
End Sub
Private Sub frmProgress_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
If Not IsNothing(_BGW) Then
_BGW.RunWorkerAsync()
End If
End Sub
Private Sub _BGW_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles _BGW.ProgressChanged
progressBar.Value = e.ProgressPercentage
If Me.Text <> _TaskInProgress Then
Me.Text = _TaskInProgress
End If
End Sub
Private Sub _BGW_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles _BGW.RunWorkerCompleted
Me.Close()
_TaskInProgress = ""
End Sub
'Private Sub _BGW_DoWork(sender As Object, e As DoWorkEventArgs) Handles _BGW.DoWork
' Do While True
' ' Has the background worker be told to stop?
' If _BGW.CancellationPending Then
' ' Set Cancel to True
' e.Cancel = True
' Exit Do
' End If
' System.Threading.Thread.Sleep(2000) ' Sleep for 1 Second
' Loop
'End Sub
End Class
我已經上傳我的項目在這裏: https://drive.google.com/file/d/0B7gzonuQsNbvaDZvR3ltSl9WNTg/view?usp=sharing
哦,我們編織的是什麼糾結的網。沒有明顯的錯誤,發佈的代碼按預期運行。您正在忽略RunWorkerComdable事件處理程序中的e.Error屬性,從來沒有這樣做。並擺脫AutoResetEvent,它沒有任何用處。 –
您能否將您的工作版本上傳到某個地方?因爲它仍然沒有按預期爲我工作。 – Tejas
@HansPassant仍有問題。我已經在這裏上傳了我的項目,請問您可以通過在您的最後跑步看看嗎? https://drive.google.com/file/d/0B7gzonuQsNbvaDZvR3ltSl9WNTg/view?usp=sharing – Tejas