Процент прогресса фонового работника - PullRequest
0 голосов
/ 11 февраля 2019

Я добавляю строковые значения в список из списка <>.Я хочу рассчитать процент прогресса в методе ReportProgress. Пожалуйста, помогите мне рассчитать процент прогресса.Я написал 0 в первом параметре метода ReportProgress.Я хочу заменить это 0 на процент прогресса.

Вот мой код.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
     List<string> result = new List<string>();
     var found = obj.getFiles();

     foreach (var item in found)
     {
         if (item.Contains("SFTP:") || item.Contains("ERROR:"))
         {
             result.Add(item);

             (sender as BackgroundWorker).ReportProgress(0, item);
         }
         else
             (sender as BackgroundWorker).ReportProgress(0);
         System.Threading.Thread.Sleep(1000);

     }
     e.Result = result;
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    if (e.UserState != null)
        listBox1.Items.Add(e.UserState);

    progressBar2.Value = e.ProgressPercentage;
}

1 Ответ

0 голосов
/ 11 февраля 2019

Foreach - не обязательно лучшая итерация для этого приложения.Используйте цикл for и используйте индекс для расчета прогресса на основе размера найденного.

     for (int i = 0; i < found.Count; i++)
     {
         int progress = (int)(((float)(i + 1) / found.Count) * 100);
         if (found[i].Contains("SFTP:") || found[i].Contains("ERROR:"))
         {
             result.Add(found[i]);

             (sender as BackgroundWorker).ReportProgress(progress, found[i]);
         }
         else
             (sender as BackgroundWorker).ReportProgress(progress);
         System.Threading.Thread.Sleep(1000);    
     }
...