2012-03-18 3 views
1

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.

ответ

0

Попробуйте установить его как

Public Function MyTest(worker as BackgroundWorker) As Boolean 
    worker.ReportProgress(0) 
End Function 

, чтобы убедиться, что вы говорите с экземпляром правом работника.

(И в стороне: избегайте использования имен классов для полей экземпляра).

+0

Спасибо Хенк, это решило мою проблему точно. Очень проста в применении и интуитивно понятна. – finch

Смежные вопросы