Mise à jour des barres de progression WinForms lors de calculs externes sans blocage de l'interface utilisateur
Les applications WinForms doivent souvent afficher la progression lors de longs calculs effectués par des bibliothèques externes. La clé est de mettre à jour la barre de progression sans rendre la méthode de calcul dépendante de l'interface utilisateur.
Tirer parti de BackgroundWorker
Le composant BackgroundWorker
apporte une solution efficace. Il permet l'exécution parallèle de calculs dans un thread séparé, permettant des mises à jour périodiques de la progression du thread principal de l'interface utilisateur. Voici une illustration :
<code class="language-csharp">private void Calculate(int i) { double pow = Math.Pow(i, i); } private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { Calculate(j); // Perform your external calculation worker.ReportProgress(j); // Report progress to the UI thread Thread.Sleep(100); // Simulate work } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
Dans ce scénario, backgroundWorker1_DoWork
gère les calculs et rapporte la progression via ReportProgress
. backgroundWorker1_ProgressChanged
met ensuite à jour la barre de progression en conséquence.
Avantages de l'utilisation de BackgroundWorker
Cette méthode offre plusieurs avantages clés :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!