My BackgroundWorker отлично работает в моей основной форме frmMain. Но когда я запускаю метод ReportProgress в другом модуле, я получаю исключение «This BackgroundWorker заявляет, что он не сообщает о прогрессе. Модифицируйте WorkerReportsProgress, чтобы заявить, что он сообщает о ходе». Он настроен на отчет о прогрессе; это отлично работает при одинаковом запуске в основном модуле.BackgroundWorker.ReportProgress исключение, если выполняется в другом модуле
В принципе, из модуля, который называется моей 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
Am с помощью VB.NET в VS 2010, с .NET 3.5.
Спасибо Хенк, это решило мою проблему точно. Очень проста в применении и интуитивно понятна. – finch