Vb.net 进程完成后立即填充进度条控件
我写了一个检查邮件的程序。它将邮件与Excel中的列表进行比较。如果邮件也在列表中找到,则它正在移动它们 我确实在程序中包含了一个进度条控件,它正在工作。但事实并非如此。一旦程序移动了所有邮件,进度条控件就开始移动 经过大量的研究,我发现不可能与GUI交互。我需要先“停止”我的代码。我试过了,但我发现没有一个解决方案对我有效Vb.net 进程完成后立即填充进度条控件,vb.net,progress-bar,Vb.net,Progress Bar,我写了一个检查邮件的程序。它将邮件与Excel中的列表进行比较。如果邮件也在列表中找到,则它正在移动它们 我确实在程序中包含了一个进度条控件,它正在工作。但事实并非如此。一旦程序移动了所有邮件,进度条控件就开始移动 经过大量的研究,我发现不可能与GUI交互。我需要先“停止”我的代码。我试过了,但我发现没有一个解决方案对我有效 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, _ ByVal e
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'Do
'Percentage = Count / (Anzahl_mail + 1)
'Percentage = Percentage * 100
Dim numToDo As Integer = CInt(e.Argument)
For n As Integer = 1 To numToDo
System.Threading.Thread.Sleep(100)
BackgroundWorker1.ReportProgress(Convert.ToInt32((n / numToDo) * 100))
'BackgroundWorker1.ReportProgress(Percentage)
Next
'Loop While Not BackgroundWorker1.CancellationPending
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, _
e As System.ComponentModel.ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged
If ProgressBar1.Value = ProgressBar1.Maximum Then
ProgressBar1.Value = ProgressBar1.Minimum
End If
Me.ProgressBar1.Value = DirectCast(e.ProgressPercentage, Integer)
'Me.Invoke(New MethodInvoker(Sub() Me.ProgressBar1.Value = e.ProgressPercentage))
End Sub
这回答了你的问题吗?你的代码对我来说非常好。我使用了该代码并调用了
BackgroundWorker1.RunWorkerAsync(100)
,看到ProgressBar
逐渐填满。这不是您看到的吗?我猜您添加了专门用于“进度条”的代码,并让您的邮件代码在UI线程中运行(可能在按钮单击事件处理程序中)。您需要做的是从按钮中调用BackgroundWorker1.RunWorkerAsync()
,然后将所有邮件检查代码放入实际的DoWork
处理程序中…根据需要提高进度。感谢您的快速响应。progressbar正在工作。这是否回答了您的问题?你的代码对我来说非常好。我使用了该代码并调用了BackgroundWorker1.RunWorkerAsync(100)
,看到ProgressBar
逐渐填满。这不是您看到的吗?我猜您添加了专门用于“进度条”的代码,并让您的邮件代码在UI线程中运行(可能在按钮单击事件处理程序中)。您需要做的是从按钮中调用BackgroundWorker1.RunWorkerAsync()
,然后将所有邮件检查代码放入实际的DoWork
处理程序中…根据需要提高进度。感谢您的快速响应。progressbar正在工作。