Maison >développement back-end >C++ >Comment découpler les mises à jour de la barre de progression des calculs externes en C# ?

Comment découpler les mises à jour de la barre de progression des calculs externes en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-14 10:49:44429parcourir

How to Decouple Progress Bar Updates from External Calculations in C#?

Mises à jour de la barre de progression en C# pour gérer les calculs externes sans entrave

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn