通过线程访问ProgressBar

时间:2012-11-15 13:57:51

标签: vb.net multithreading

这可能听起来很愚蠢,但我无法在另一个线程中访问进度条。是的,我已经调用了它。看看:

Delegate Sub ProgressBarCallback(ByVal value As Integer, ByVal max As Integer)


Sub updateProgressBarCurrent(ByVal value As Integer, ByVal max As Integer)

    If Me.progressBar_currentState.InvokeRequired = True Then
        Dim d As New ProgressBarCallback(AddressOf updateProgressBarCurrent)
        Me.progressBar_currentState.Invoke(d, New Object() {value, max})
    Else
        progressBar_currentState.Maximum = max
        If value < max Then
            progressBar_currentState.Value = value
            progressBar_currentState.Refresh()
        End If
    End If

End Sub

我正在从类中的方法调用updateProgressBarCurrent()。看看调试器:

Debugger Screenshot

ProgressBar没有做任何事情。这是因为我从databaseHandler类中的方法调用sub updateProgressBarCurrent吗?我怎样才能解决这个问题? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您是否在使用表单的“默认实例”功能?多线程应用程序中的No-Go! EACH线程有一个默认实例。因此,如果您从另一个线程调用Form1.DoSomething,则不会调用“您的”Form1,而是调用Form1的新(不可见,未显示)实例。