저는 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