如何在循环中同步ProgressBar

时间:2014-11-15 18:49:51

标签: .net vb.net multithreading winforms progress-bar

我尝试在循环中同步填充标签连续数字的进度条。但我的标签比进度条早完成。下图显示了这种情况。

enter image description here

我使用第二个线程来完成这个漫长的过程。这是我的测试代码:

Public Class Form1

    Dim watek As System.Threading.Thread

    Public Sub New()
        InitializeComponent()
        Control.CheckForIllegalCrossThreadCalls = False
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        watek = New System.Threading.Thread(AddressOf DoSomething)
        watek.Start()
    End Sub


    Private Sub DoSomething()
        Dim i As Integer = 0
        Dim max As Integer = 10000
        ProgressBar1.Maximum = max
        ProgressBar1.Step = 1

        Do Until i > ProgressBar1.Maximum
            ProgressBar1.PerformStep()
            Label1.Text = i
            i = i + 1
        Loop
    End Sub
End Class

这是我的问题 - 为什么会这样?为什么进度条不与标签同步?请有人能解释一下吗?如何获得预期的结果?

2 个答案:

答案 0 :(得分:3)

你可以在这里做的一件事就是检查进度条的最大值是否在标签中,如果它正在进行,但仍然没有显示该值,因为它应该只是写" this.Refresh(); "这将强制显示UI上的更改。

答案 1 :(得分:1)

进度条总是需要一些"刷新"时间。

您可以将进度条的值设置为一千,它需要大约2秒才能填满该值。

试试这个:

For i = 0 to max
    ProgressBar1.PerformStep()
    If (i mod 100) = 0 Then
        Application.Doevents()
    End If
Next

注意:如果编码(Control.CheckForIllegalCrossThreadCalls = False),我不会宽恕你的方式,但那不是 现在问题