2016-09-14 1 views
-2

J'ai une barre de progression dans l'interface utilisateur, je veux changer sa progression avec l'exécution de chaque fonction jusqu'à la fin. J'ai essayé avec le travailleur de fond. J'essaie d'implémenter en utilisant la fonction backgroundworker_dowork. Comment puis-je le synchroniser avec mes fonctionnalités en cours? À l'heure actuelle, le travail ne fait que progresser. Comment puis-je l'augmenter avec chaque exécution de fonction.C# Barre de progression avec backgroundworker

Mon code est quelque chose comme ceci:

private void Ok_Button_Click(object sender, EventArgs e) 
    { 
        //set max sixe of progress bar 
     elementForm.progressBar1.Maximum = 100; 
     //// To report progress from the background worker we need to set this property 
     elementForm.backgroundWorker1.WorkerReportsProgress = true; 
     //// This event will be raised on the worker thread when the worker starts 
     elementForm.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); 

     //// This event will be raised when we call ReportProgress 
     elementForm.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); 
     elementForm.backgroundWorker1.RunWorkerAsync(); 
method1(); 
progress=10; 
method2(); 
progress=20 
method3(); 
lastmethod(); 
progress=100; 

} 

essentiellement des progrès devraient augmenter en même temps que l'exécution de la méthode. chaque méthode fait quelque chose qui devrait augmenter les progrès et après la dernière méthode appelée progrès devrait être de 100%.

Code

pour backgroundWorker1_DoWork (que dois-je faire ici pour synchroniser l'incrément de progression avec des méthodes achèvement)

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 

     if (elementForm.progressBar1.Value < elementForm.progressBar1.Maximum) 
     { 
      while(progress!=100) 
      { 

       elementForm.progressBar1.Increment(progress); 

       elementForm.progressBar1.CreateGraphics().DrawString(progress.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(elementForm.progressBar1.Width/2 - 10, elementForm.progressBar1.Height/2 - 7)); 


      } 
     } 
    } 
code

pour backgroundWorker1_ProgressChanged:

 private void backgroundWorker1_ProgressChanged(object sender, 
      ProgressChangedEventArgs e) 
    { 
     if (elementForm.InvokeRequired) 
     { 
      elementForm.Invoke(new Action<object, ProgressChangedEventArgs>(backgroundWorker1_ProgressChanged), sender, e); 

      return; 
     } 

     // The progress percentage is a property of e 
     elementForm.progressBar1.Value = e.ProgressPercentage; 

    } 
+0

veuillez insérer quelques codes pour montrer ce que vous avez fait. – active92

+0

Montrez-nous votre code! – Enigmativity

+0

Regardez la colonne correspondante sur la droite ici. Il y a des dizaines de questions similaires sur ce site. Qu'est-ce qui rend votre question différente? –

Répondre

-1

Merci pour tous les commentaires.

J'ai placé ma fonctionnalité dans Do_work et ma barre de progression surveille et fonctionne en synchronisation avec les appels de fonction dans Do_work.