Inquiridor
background + progressbar

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; }
- Editado Jonathan França terça-feira, 16 de outubro de 2018 02:02
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.
-
-
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
-
-