Мой BackgroundWorker отлично работает в моей основной форме frmMain. Но когда я запускаю метод ReportProgress в другом модуле, я получаю исключение «Этот BackgroundWorker заявляет, что он не сообщает о прогрессе. Измените WorkerReportsProgress, чтобы заявить, что он сообщает о прогрессе». Это установлено, чтобы сообщить о прогрессе; это работает нормально, если в главном модуле выполняется то же самое.
По сути, из модуля, вызываемого моим BackgroundWorker, я хочу показать прогресс в моей основной форме.
Как я могу это исправить? Единственная идея, которую я имею, состоит в том, чтобы переместить код из модуля в мою основную форму, но это кажется шагом назад, который потребует дополнительной работы. Надеюсь, есть более простые способы!
Телефонный код в классе frmMain:
Friend WithEvents BackgroundWorker As New System.ComponentModel.BackgroundWorker
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
' Specify that we do NOT want the background operation to allow cancellation
BackgroundWorker.WorkerSupportsCancellation = False
' Specify that we want the background operation to report progress.
BackgroundWorker.WorkerReportsProgress = True
' Start running the background operation by calling the RunWorkerAsync method.
BackgroundWorker.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker_DoWork(ByVal sender As Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork
Dim result As Boolean
result = MyTest()
End Sub
Private Sub BackgroundWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker.ProgressChanged
Me.Text = e.ProgressPercentage.ToString() & "%"
sspStatus.Text = e.UserState.ToString
End Sub
Private Sub BackgroundWorker_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker.RunWorkerCompleted
If e.Cancelled = True Then
' The background operation was cancelled
Me.Text = "Cancelled!"
ElseIf e.Error IsNot Nothing Then
' The background operation encountered an error
Me.Text = "Error: " & e.Error.Message
Else
' The background operation completed successfully
Me.text = "Done!"
End If
End Sub
Код, который генерирует исключение в отдельном модуле Счета:
Public Function MyTest() As Boolean
frmMain.BackgroundWorker.ReportProgress(0)
End Function
Использую VB.NET в VS 2010, с .NET 3.5.