Я новичок в VB.Net, и мне нужно написать длительный процесс с циклом while / end while.
Чтобы избежать зависания пользовательского интерфейса, я добавил в форму объект BackgroundWorker.
Затем мне нужно было обновить интерфейс, но я обнаружил, что поток не может этого сделать.Вместо этого поток должен вызвать 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