Maison >développement back-end >C++ >Comment découpler les mises à jour de la barre de progression des calculs externes en C# ?
Dans certains cas, vous devrez peut-être afficher la progression des calculs en cours effectués dans une bibliothèque externe. Cependant, vous souhaitez dissocier la méthode de calcul de la dépendance directe de la barre de progression.
Considérons l'exemple suivant :
<code class="language-c#">private void CaluculateAll(System.Windows.Forms.ProgressBar progressBar) { progressBar.Maximum = 100000; progressBar.Step = 1; for (int j = 0; j < 100000; j++) { // Perform some calculation progressBar.PerformStep(); } }</code>
Bien que cette approche garantisse un rapport de progression, elle lie étroitement la méthode CaluculateAll
à la barre de progression. Pour résoudre ce problème, pensez à utiliser la classe BackgroundWorker :
<code class="language-c#">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker.RunWorkerAsync(); } private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var backgroundWorker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { // Perform some calculation backgroundWorker.ReportProgress(j); } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
Cette séparation permet d'effectuer des calculs indépendamment de l'interface utilisateur tout en fournissant un mécanisme de reporting de progression incrémentiel. BackgroundWorker gère le threading et la synchronisation nécessaires pour éviter que l'interface ne se fige pendant les calculs.
En utilisant efficacement le BackgroundWorker, vous pouvez mettre à jour de manière transparente la barre de progression sans affecter la flexibilité et le découplage de votre base de code.
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!