2017-03-01 1 views
-1

J'ai un programme avec une barre de progression qui ne se met pas à jour tant que le programme n'est pas terminé. J'ai creusé un peu et j'ai compris que je devais faire un fond d'écran pour qu'il se mette à jour pendant que ma boucle fonctionne. D'après les exemples montrés, je ne comprends pas ce que je suis censé faire. Quelqu'un peut-il m'expliquer comment mettre en place et ce qu'il fait s'il vous plaît?Créer un BackgroundWorker pour que ProgressBar fonctionne

int progressBar; 

private void button3_Click(object sender, EventArgs e) 
     { 

      try 
      { 
       while (y < PriDID.Count) 
       { 
        cmd.CommandText = "SELECT COUNT(*) FROM Accounts WHERE ACCT='" + ACCT[y] + "'"; 
        int count = Convert.ToInt32(cmd.ExecuteScalar()); 

        if (count < 1) 
        { 
         progressBar = (y/SDM_ACCT.Count) * 100; 
         progressBar1.Value = progressBar; 
         progressBar1.Update(); 
         Console.WriteLine(SDM_ACCT[y - 1]); 
         cmd.CommandText = @"INSERT INTO Accounts(SDM_ACCT,Description) 
             values(" + "'" + ACCT[y] + "'," + "'" + Comment[y] + ")"; 
         cmd.ExecuteNonQuery(); 
         y++; 
         recordCount++; 
        } 
        else 
        { 
         y++; 
        } 


        MessageBox.Show(recordCount + " unique records successfully loaded to the Database."); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Exception: " + ex.Message + " Please make sure you have selected a valid path for your CSV and database."); 
      } 

     } 
+0

Quelles informations avez-vous trouvé sur la façon d'écrire un travailleur de fond, et quels problèmes spécifiques avez-vous eu avec votre mise en œuvre de celui-ci? – Servy

+0

Je l'ai trouvé mais je ne comprends pas comment l'adapter à ce que j'ai. http://stackoverflow.com/questions/6481304/how-to-use-a-backgroundworker –

+1

Quels problèmes * spécifiques * avez-vous adaptés à votre situation? Qu'est-ce qui n'a pas marché pour toi? – Servy

Répondre

1

Je pense que si vous regardez cet exemple, vous saurez comment vous pouvez le faire. J'ai inventé quelques valeurs et nommé les variables mêmes que vous. Si vous savez combien de temps il faut pour que la boucle while s'exécute, vous pouvez déclarer que DoWork n'écrit que --- --- progressBarWorker.DoWork + = et double tab. Et vous obtenez un Evenhandler DoWork. Et dans ce eventhandler vous pouvez faire une boucle for)

for (int i = 0; i < 100; i ++)

{

Thread.Delay (100);

progressBarWorker.ReportProgress (i);

}

puis mis ProgressBarWorker.RunWorkerAsync(); comme la première chose dans le gestionnaire d'événements button3.

A BackroundWorker Example I made for you

+0

Obtention d'une erreur "This BackgroundWorker indique qu'il ne signale pas la progression.Modifiez WorkerReportsProgress pour indiquer qu'il signale la progression." Qu'est-ce que j'ai raté? –

+0

Vous devez définir ProgressBarWorker.WorkerReportsProgress = true; –

+0

Ok, cet exemple m'a donné une barre de progression qui fonctionne par intermittence. Parfois, j'obtiens une erreur sur 'progressBarWorker.ReportProgress (y);' qui indique "Cette opération a déjà été exécutée par OperationCompleted et d'autres appels sont illégaux." même si c'est la première fois que vous essayez d'exécuter le programme. –