Maison >développement back-end >C++ >Comment mettre à jour une barre de progression WinForms lors de calculs asynchrones ?
Lors de l'utilisation de bibliothèques externes qui effectuent de longs calculs, il est utile d'afficher une barre de progression pour fournir des commentaires à l'utilisateur. Dans WinForms, vous pouvez utiliser le contrôle ProgressBar à cette fin.
Si les calculs sont effectués de manière synchrone dans votre classe Form, utilisez simplement la méthode PerformStep() pour incrémenter la ProgressBar une fois chaque calcul terminé. Par exemple :
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100000; progressBar1.Step = 1; for(int j = 0; j < 100000; j++) { // Perform calculation progressBar1.PerformStep(); } }</code>
Cependant, si le calcul est effectué de manière asynchrone dans une méthode externe, la ProgressBar ne peut pas être mise à jour directement à partir de cette méthode. Utilisez plutôt la classe BackgroundWorker pour effectuer des calculs et signaler la progression au thread de l’interface utilisateur.
La classe BackgroundWorker vous permet d'effectuer des opérations fastidieuses dans un thread séparé tout en fournissant des mises à jour de progression au thread principal de l'interface utilisateur. Il dispose d'une méthode ReportProgress qui vous permet de renvoyer le pourcentage de progression au thread de l'interface utilisateur.
Ce qui suit est un exemple utilisant BackgroundWorker :
<code class="language-csharp">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 calculation backgroundWorker.ReportProgress(j); Thread.Sleep(100); // 模拟耗时操作 } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
Dans cet exemple, le calcul est effectué dans la méthode backgroundWorker_DoWork, tandis que la méthode backgroundWorker_ProgressChanged est utilisée pour mettre à jour la ProgressBar sur le thread de l'interface utilisateur.
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!