J'ai une tâche qui prend beaucoup de temps à exécuter. Afin d'informer l'utilisateur de la progression, j'ai une barre de progression forte> que je mettez à jour dans Quelqu'un peut-il me dire s'il s'agit de la meilleure façon de mettre à jour la barre de progression «forte» forte>? J'ai entendu dire qu'il y ait un dowork code>. P>
ReportProgress CODE> MANUTLER EVENIR mais je suis confus car je ne suis pas sûr du but de
ReportProgress code>. P>
3 Réponses :
ReportProgress est ce que vous utiliseriez pour mettre à jour la progression de votre tâche, y compris des éléments tels que l'interface utilisateur - dans votre cas, une barre de programéné.
Vous devez consulter les documents MSDN, situé ici . p>
essentiellement, vous créez un gestionnaire Pour l'événement de ReportProgress, puis dans votre Doworkeventhandler, vous appelez le ReportProgress comme SO: P>
worker.ReportProgress((i * 10));
D'accord! Merci, je peux donc appeler ReportProgress et créera un événement progressif à mesure que Maurizio le dit. Ensuite, à l'intérieur de l'événement de progression, je peux mettre à jour tout contrôle de mon interface utilisateur que je veux, par exemple, ProgressBar, étiquette, textblock, ... sans besoin d'appeler Dispatcher.Invoke. Ai-je raison? Merci.
L'événement progresssif est ce que vous recherchez. Cependant, assurez-vous de créer le travail d'arrière-plan comme ci-dessous, de sorte que cela augmente cet événement lorsque ReportProgress est appelé.
BackgroundWorker bw = new BackgroundWorker() { WorkerReportsProgress = true }; bw.ProgressChanged += ... ;
Étant donné que le travailleur d'arrière-plan fonctionne dans un fil séparé, vous rencontrez des problèmes si vous essayez d'accéder aux objets d'interface utilisateur. Appeler la méthode de ReportProgress sur le travailleur de l'intérieur du gestionnaire de Dowork soulève l'événement progressé. Cet événement doit être traité dans le fil de l'interface utilisateur afin d'accéder facilement à la commande.
public void DoWorkHandler(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; while (working) { // Do Stuff worker.ReportProgress(progressPercentage); } }