2011-07-31 8 views
3

저는 VB.Net 초보자이며 While/End While 루프를 사용하여 장기 실행 프로세스를 작성해야합니다.ProgressChanged에 텍스트 매개 변수를 전달하는 방법은 무엇입니까?

UI를 고정시키지 않기 위해 양식에 BackgroundWorker 개체를 추가했습니다.

다음으로 UI를 업데이트해야하지만 스레드가이 작업을 수행 할 수 없음을 알았습니다. 대신 스레드는 ReportProgress()를 호출하여 ProgressChanged() 이벤트를 트리거해야합니다.

그러나 예외 (ex.Message)의 텍스트를 이벤트로 전달해야하지만이를 수행하는 방법에 대한 예제는 찾지 못했습니다. 양식의 제목 표시 줄을 업데이트하려면 해당 텍스트 메시지가 필요합니다.

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 
    While (True) 
     Try 
      ... 
     Catch ex As Exception 
      'Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on. 
      'Me.Text = ex.Message 

      BackgroundWorker1.ReportProgress(100) 
     End Try 

     System.Threading.Thread.Sleep(2000) 
    End While 
End Sub 

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged 

     'How to get ex.Message, and change the form's title bar accordingly? 
     'Me.Text = ??? 
End Sub 

감사합니다 :

여기에 코드입니다.


편집 : 여기에 이벤트에 패스에게 오류 메시지 및 폼의 제목 텍스트를 변경하는 방법은 다음과 같습니다

 Catch ex As Exception 
      BackgroundWorker1.ReportProgress(100, ex.Message) 
     End Try 

     System.Threading.Thread.Sleep(2000) 
    End While 
End Sub 

Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged 
    Me.Text = e.UserState.ToString 
End Sub 

답변

4

Reportprogress의 방법 A INT32 객체 소요 an overload있다 매개 변수. 메시지 또는 전체 예외를 주 스레드로 전달할 수 있습니다.

ProgressChanged 이벤트에서 UserState 속성에서 검색 할 수 있습니다.

관련 문제