8
votes

WPF Best Point pour mettre à jour une barre de progression de Backworker

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 que je mettez à jour dans dowork .

Quelqu'un peut-il me dire s'il s'agit de la meilleure façon de mettre à jour la barre de progression «forte» ? J'ai entendu dire qu'il y ait un ReportProgress MANUTLER EVENIR mais je suis confus car je ne suis pas sûr du but de ReportProgress .


0 commentaires

3 Réponses :


0
votes

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));


1 commentaires

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.



0
votes

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 += ... ;


0 commentaires

10
votes

É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);
        }
    }


0 commentaires