2012-11-15 6 views
2

이것은 바보처럼 들리지만 다른 스레드에서 진행률 표시 줄에 액세스 할 수 없습니다. 예, 호출했습니다. 그것을 확인하십시오 :스레드를 통해 ProgressBar에 액세스

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 클래스의 메서드에서 하위 updateProgressBarCurrent를 호출하기 때문에 발생합니까? 이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

2

양식에 "기본 인스턴스"기능을 사용하고 있습니까? 일종의 멀티 스레드 응용 프로그램에서 이동하십시오! 각 스레드에 대해 하나의 기본 인스턴스가 있습니다. 따라서 다른 스레드에서 Form1.DoSomething을 호출하면 "사용자"Form1이 아니라 Form1의 새로운 (보이지 않는, 표시되지 않은) 인스턴스가 호출됩니다.

+0

죄송합니다. 완전히 잊었습니다. 정말 고맙습니다! – dislick

관련 문제