none
background + progressbar RRS feed

  • Discussão Geral

  • Bom eu não estou conseguindo fazer que o processo em execução no background apareça na progress bar, alguém me ajude!, segue meu cod 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { backgroundWorker1.WorkerReportsProgress(Listar()); }

            private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                label1.Text = "%  " + e.ProgressPercentage;
                progressBar1.Value = e.ProgressPercentage;
            }

    private int Listar() { int result = 0; DirectoryInfo Dir = new DirectoryInfo(@"C:\Program Files (x86)"); // Busca automaticamente todos os arquivos em todos os subdiretórios FileInfo[] Files = Dir.GetFiles("*.exe*", SearchOption.AllDirectories); foreach (FileInfo File in Files) { Invoke(new Action(() => { listBox1.Items.Add(File.FullName); })); } return result; }



    terça-feira, 16 de outubro de 2018 02:01

Todas as Respostas

  • Olá Jonathan,

    O problema está ao chamar o método Listar no DoWork, vê as modificações que fiz no meu exemplo:

    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
            {
                
                int count = 0;
                
                DirectoryInfo Dir = new DirectoryInfo(@"C:\Users\Administrador\Pictures\");
                
                // Busca automaticamente todos os arquivos em todos os subdiretórios
                FileInfo[] Files = Dir.GetFiles("*.*",SearchOption.AllDirectories);
                foreach (FileInfo File in Files)
                {
                    Invoke(new Action(() => { listBox1.Items.Add(File.FullName); }));
                    backgroundWorker1.ReportProgress(count);
                    count++;
                }
            }

            private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
            {
                progressBar1.Minimum = 0;
                progressBar1.Maximum = e.ProgressPercentage;
                progressBar1.Value = e.ProgressPercentage;
                lblPorcentagem.Text = e.ProgressPercentage + " Arquivos ";
            }

    Se te ajudou marque "Util" e "Resposta" para facultar outros com mesmo problema.

    terça-feira, 16 de outubro de 2018 07:22
  • queria pode listar 1 por 1 acho que tiraria o atraso, pq pois está listando na listbox e depois executando a progressbar
    terça-feira, 16 de outubro de 2018 12:56
  • Olá outra vez,

    Dependendo do teu critério, o código do evento DoWork pode ficar assim:

                                            

    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {

          int count = 0;

          DirectoryInfo Dir = new DirectoryInfo(@"C:\Users\Administrador\Pictures\");

          // Busca automaticamente todos os arquivos em todos os subdiretórios
          FileInfo[] Files = Dir.GetFiles("*.*",SearchOption.AllDirectories);
          foreach (FileInfo File in Files)
          {
              Invoke(new Action(() => { listBox1.Items.Add(File.FullName); }));
              count++;
          }

          for(int i = 0;i < count;i++)
              backgroundWorker1.ReportProgress(i);
    }

    Espero que te ajudou.


    • Editado Timóteo Nkawa terça-feira, 16 de outubro de 2018 13:35 Correção
    terça-feira, 16 de outubro de 2018 13:30
  • Continua com o mesmo atraso, ver se consegue me compreender 
    https://gyazo.com/4d7be5dcf51c0d2a10c93bf55eb91f3c

    terça-feira, 16 de outubro de 2018 13:37
  • Problema resolvido com 
    System.Threading.Thread.Sleep(500);

    terça-feira, 16 de outubro de 2018 14:02