0
votes

Comment ajouter une minuterie écoulée (min) à GUI, pendant la barre de progression en cours d'exécution

Je veux ajouter du temps écoulé (minutes) à une interface graphique et faites autre chose en parallèle.

Tout ce que j'essaie ne réussit pas, il colle dans ma graphique. I Ajouter un exemple: P>

namespace Backgrondworker
{
    public partial class Form1 : Form
    {
        int aa = 0;

        public Form1()
        {
            InitializeComponent();         
        }

        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
            progressBar1.Maximum = 10;
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {          
            for(int i =1;i<=10;i++)
            {
                Thread.Sleep(1000);
                backgroundWorker1.ReportProgress(0);            
            }          
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value += 1;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("completed");

        }
    }
}


3 commentaires

Normalement, la progression est signalée via le paramètre de ReportProgress . Êtes-vous sûr que les événements Hanlders sont câblés? Afficher le contenu de initializecomonent () méthode.


Quoi d'autre avez-vous besoin de faire en parallèle? Seul le thread principal peut modifier les propriétés des objets sur le formulaire, de sorte que vous préférez votre travail parallèle dans un fil ou une tâche et mettez à jour la progression à l'aide d'un contrôle de minuterie.


Qu'est-ce que "colle dans ma graphique" signifie? Je comprends cela comme "rien ne se passe", mais je pourrais avoir tort.


3 Réponses :


1
votes

Vous devriez faire ce qui suit

  1. créer une minuterie
  2. Démarrez la minuterie lorsque vous démarrez la barre de progression
  3. Dans la minuterie, cochez Utilisez la classe Timespan et la propriété écoulée pour obtenir les minutes écoulées et les montrer dans une étiquette.
  4. Arrêtez la minuterie lorsque la barre de progression est à maxsize.

0 commentaires

0
votes

vous mettez 0 dans ReportProgress : xxx

changez ceci à: xxx

Division par 10 vous donne la fraction du travail effectué (vous comptez 10 fois dans la boucle) et multipliez par 100 est pour obtenir le pourcentage.


0 commentaires

0
votes

J'explique: Formulaire de classe partielle publique1: forme {

    public Form1()
    {
        InitializeComponent();         
    }

    private void button1_Click(object sender, EventArgs e)
    {

        Task.Run(() =>
        {
            for (int i = 1; i <= 10; i++)
            {
                Thread.Sleep(1000);
                label2.Text = i.ToString();
            }
        });

        Task.Run(() =>
        {
            for (int i = 1; i <= 10; i++)
            {
                Thread.Sleep(1000);
                label3.Text = i.ToString();
            }
        });
    } 
}


0 commentaires