IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

ProgressBar et fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2018
    Messages : 5
    Par défaut ProgressBar et fichier
    Bonjour,

    Novice sur les backgroundworker et les threads, je souhaite lorsque je lance ma commande qui déplace et supprime des fichiers entre autre afficher l'état d'avancement de la commande. La progressBar se trouvant dans un autre form, je n'arrive pas à afficher la valeur exacte celle-ci restant à 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    private void Worker_DoWork(object sender, DoWorkEventArgs e)
    {
    String[] Unique_File = File.ReadAllLines(@".\CopyPasteFile.txt");
    foreach (string s in Unique_File)
           {
                File.Copy(Path.Combine(tmpPath, s), Path.Combine(TempFolder, s), true);
     
           }
    var fileCount = (from file in Directory.EnumerateFiles(TempFolder, "*.", SearchOption.AllDirectories) select file).Count();
    for (int i = 0; i < (fileCount + 1); i++)
           {
                Worker.ReportProgress(i);
                Thread.Sleep(50);
           }
    }
     
    private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    Archive.CopyPaste_Label_Pourcentage.Text = (e.ProgressPercentage.ToString() + "%");
    Archive.Message = "Processing data, please wait ... ";
    Archive.ProgressValue = e.ProgressPercentage;
    }
    Merci de votre aide et bonne journée.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Voici qui devrait t'aider à y voir plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    using System;
    using System.IO;
    using System.Linq;
    using System.ComponentModel;
     
    public class Form1
    {
        private string m_TempFolder;
     
        public Form1()
        {
            // Cet appel est requis par le concepteur.
            InitializeComponent();
            // Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            BackgroundWorker1.WorkerReportsProgress = true;
            m_TempFolder = @"D:\TempFolder";
        }
     
        private void Button1_Click(object sender, EventArgs e)
        {
            if (!BackgroundWorker1.IsBusy)
                BackgroundWorker1.RunWorkerAsync();
        }
     
        private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                string[] Unique_Files = File.ReadAllLines(@"D:\CopyPasteFile.txt");
     
                // '''Partant du principe que le contenu de ton fichier .txt ressemble à ceci (des chemins de fichiers existants) :
                // D:\10_Famille.txt
                // D:\20190331202606_aclExtraction.txt
                // D:\test.txt
                // D:\txt.txt
     
                // '''On parcours le tableau de string :
                int i = 0;
                foreach (string line in Unique_Files)
                {
                    i += 1;
                    // 'On mets à jour la progressbar et le label
                    BackgroundWorker1.ReportProgress((i / Unique_Files.Count()) * 100, line);
                    // 'On copie le fichier en cours
                    File.Copy(line, Path.Combine(m_TempFolder, new FileInfo(line).Name), true);
                }
     
                // 'On indique à la routine de completed que le job est terminé
                e.Result = new string[2] { "Success", i.ToString() + " fichier(s) copié(s)." };
            }
            catch (Exception ex)
            {
                // 'On indique à la routine de completed que le job a rencontré une erreur
                e.Result = new string[2] { "Error", ex.ToString() };
            }
        }
     
        private void BackgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            ProgressBar1.Value = e.ProgressPercentage;
            Label1.Text = "Copie du fichier : " + e.UserState.ToString();
        }
     
        private void BackgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
            }
            else
                switch (e.Result(0).ToString())
                {
                    case "Success":
                        {
                            break;
                        }
     
                    case "Error":
                        {
                            break;
                        }
                }
            ProgressBar1.Value = 0;
            Label1.Text = "";
        }
    }
    Tu pourrais l'agrémenter en ajoutant la possibilité d'annuler la copie en cours.....

    Bon codage ++

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/06/2006, 08h29
  2. [VB.NET]Comment afficher 1 progressbar lors d'une lecture fichier ?
    Par evlp2004@hotmail.com dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/05/2006, 09h00
  3. Copie de fichiers avec progressbar
    Par serialmatrix dans le forum C++
    Réponses: 3
    Dernier message: 11/02/2006, 18h30
  4. [FLASH MX] progressBar et fichier externe
    Par totoche dans le forum Flash
    Réponses: 6
    Dernier message: 02/12/2005, 15h49
  5. Copier fichier avec progressbar
    Par marcus333 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 13/09/2005, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo