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%.
Codepour 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;
}
veuillez insérer quelques codes pour montrer ce que vous avez fait. – active92
Montrez-nous votre code! – Enigmativity
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? –