Vb.net 进程完成后立即填充进度条控件

Vb.net 进程完成后立即填充进度条控件,vb.net,progress-bar,Vb.net,Progress Bar,我写了一个检查邮件的程序。它将邮件与Excel中的列表进行比较。如果邮件也在列表中找到,则它正在移动它们 我确实在程序中包含了一个进度条控件,它正在工作。但事实并非如此。一旦程序移动了所有邮件,进度条控件就开始移动 经过大量的研究,我发现不可能与GUI交互。我需要先“停止”我的代码。我试过了,但我发现没有一个解决方案对我有效 Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, _ ByVal e

我写了一个检查邮件的程序。它将邮件与Excel中的列表进行比较。如果邮件也在列表中找到,则它正在移动它们

我确实在程序中包含了一个进度条控件,它正在工作。但事实并非如此。一旦程序移动了所有邮件,进度条控件就开始移动

经过大量的研究,我发现不可能与GUI交互。我需要先“停止”我的代码。我试过了,但我发现没有一个解决方案对我有效

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正在工作。