Maison >développement back-end >C++ >Comment mettre à jour une ProgressBar en continu à l'aide d'un BackgroundWorker ?
Contexte :
La classeBackgroundWorker
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 :
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. 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. 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!