2010-06-17 2 views
1

Я пытаюсь отобразить индикатор выполнения (marque) в отдельной форме (progressForm), в то время как я выполняю некоторые вычисления в фоновом режиме.Trigger Backgroundworker Завершено событие

Я знаю, что типичный способ сделать это - включить вычисления в фоновый рабочий и показать progressForm в основном потоке. Этот подход, как всегда, приведет к большому количеству проблем синхронизации в моем приложении, поэтому я показываю progressForm, используя progressForm.ShowDialog() в фоновом рабочем процессе. Но мне нужно вызвать событие Completed в приложении, чтобы закрыть форму.

Возможно ли это?

Заранее спасибо.

ответ

1

Как только прогресс вашего фонового рабочего достигает 100%, будет срабатывать событие RunWorkerCompleted для фонового рабочего.

Редактировать - Добавлен пример кода

Dim WithEvents bgWorker As New BackgroundWorker With { _ 
    .WorkerReportsProgress = True, _ 
    .WorkerSupportsCancellation = True} 

    Private Sub bgWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork 
     For i As Integer = 0 To 100 
      'Threw in the thread.sleep to illustrate what's going on. Otherwise, it happens too fast. 
      Threading.Thread.Sleep(250) 
      bgWorker.ReportProgress(i) 
     Next 
    End Sub 

    Private Sub bgWorker_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged 
     If e.ProgressPercentage Mod 10 = 0 Then 
      MsgBox(e.ProgressPercentage.ToString) 
     End If 
    End Sub 

    Private Sub bgWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted 
     MsgBox("Done") 
    End Sub