2010-06-17 5 views
1

J'essaie d'afficher la barre de progression (marque) dans un formulaire séparé (progressForm) pendant que je fais un calcul en arrière-plan.Trigger Backgroundworker Evénement terminé

Je sais que la façon typique de le faire est d'inclure le calcul en arrière-plan worker et show progressForm dans le thread principal. Cette approche va conduire à beaucoup de problèmes de synchronisation dans mon application, donc je montre le progressForm en utilisant progressForm.ShowDialog() dans le processus de travail en arrière-plan. Mais j'ai besoin de déclencher l'événement Completed avec dans l'application pour fermer le formulaire.

Est-ce possible?

Merci d'avance.

Répondre

1

Une fois que la progression de votre arrière-plan atteint 100%, l'événement RunWorkerCompleted se déclenche pour l'arrière-plan.

Modifier - exemple de code Ajouté

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