Maison >développement back-end >C++ >Comment mettre à jour une ProgressBar en continu à l'aide d'un BackgroundWorker ?

Comment mettre à jour une ProgressBar en continu à l'aide d'un BackgroundWorker ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-09 18:57:43613parcourir

How to Update a ProgressBar Continuously Using a BackgroundWorker?

Implémenter correctement l'utilisation de threads de travail en arrière-plan pour mettre à jour la barre de progression

Contexte :

La classe

BackgroundWorker est un composant utilisé pour effectuer des tâches de longue durée en arrière-plan tout en gardant l'interface utilisateur réactive. Il vous permet de mettre à jour l'interface utilisateur ou d'effectuer toute autre opération devant être effectuée sur le thread de l'interface utilisateur.

Question :

Un utilisateur essaie d'implémenter un BackgroundWorker pour mettre à jour la barre de progression pendant l'exécution d'une tâche de longue durée. Cependant, l'animation de la barre de progression ne démarre pas tant que le fil DoWork n'est pas terminé. L'utilisateur a également essayé d'utiliser un autre BackgroundWorker pour mettre à jour la barre de progression, mais cela n'a toujours pas fonctionné jusqu'à ce que le premier fil de discussion BackgroundWorker de DoWork soit terminé.

Réponse :

Pour utiliser correctement BackgroundWorker pour mettre à jour la barre de progression, vous avez besoin de :

  1. Implémentez correctement BackgroundWorker : Assurez-vous que la propriété BackgroundWorker de WorkerReportsProgress est définie sur true et que le gestionnaire d'événements ProgressChanged est implémenté pour mettre à jour la barre de progression.
  2. Appelez ReportProgress dans la méthode DoWork : Dans le gestionnaire d'événements BackgroundWorker de DoWork, appelez la méthode ReportProgress à intervalles appropriés pour signaler la progression actuelle de la tâche. Cela déclenchera l'événement ProgressChanged et mettra à jour la barre de progression sur le fil de discussion de l'interface utilisateur.
  3. Mettez à jour la barre de progression sur le fil de discussion de l'interface utilisateur : L'événement ProgressChanged est déclenché sur le fil de discussion de l'interface utilisateur, afin que les éléments de l'interface utilisateur puissent être mis à jour directement à partir de ce gestionnaire d'événements. Ici, vous pouvez mettre à jour l'attribut Value de la barre de progression pour refléter la progression signalée.

Exemple de code :

Voici un exemple de code simple montrant comment utiliser BackgroundWorker pour mettre à jour une barre de progression :

<code class="language-csharp">// 用户控件代码隐藏
private void DoWork(object sender, DoWorkEventArgs e)
{
    for (int i = 0; i <= 100; i++)
    {
        // 模拟长时间运行的工作
        Thread.Sleep(100);
        backgroundWorker.ReportProgress(i);
    }
}

private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // 当调用 ReportProgress 方法时,这会在 UI 线程上调用
    progressBar.Value = e.ProgressPercentage;
}</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