2015-02-27 2 views
-2

У меня есть progressBar1 в дизайнере. И у меня есть цикл, который я сообщаю о прогрессе, но только пользовательское состояние не int.Как вычислить отчет о ходе работы фонового рабочего на progressBar?

while (index != -1) 
      { 
       string firstTag = "<div class=\"CatLinkContainer\">"; 
       string endTag = "\" href"; 
       index = forums.IndexOf(firstTag, index1); 

       if (index == -1) 
        continue; 

       var secondIndex = forums.IndexOf(endTag, index); 

       result = forums.Substring(index + firstTag.Length + 12, secondIndex - (index + firstTag.Length - 50)); 
       if (result.Contains("forumPage")) 
       { 
        int index2 = result.IndexOf("\" href=\"http://www.tapuz.co.il/forums2008/forumPage.aspx?forum"); 
        result = result.Remove(index2); 
        System.Threading.Thread.Sleep(1000); 
        countResults++; 
        backgroundWorker1.ReportProgress(0, result); 
        forumsNames.Add(result); 
       } 

       index1 = index + 1; 
      } 

Отчетность по результату работает нормально. Но теперь я сообщаю о progressBar1 0. Я хочу как-то вычислить прогресс и сообщить также progressBar1 проценты.

Я добавил countResults переменная int, и я сделал countResults ++;

Например, в этом случае есть 33 результата, чтобы ответить на вопрос, как я могу рассчитать, чтобы он дошел до 100%? В других случаях может быть 1 пунктов представить или 122.

В BackgroundWorker progresschanged случае я сделал:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      toolStripStatusLabel1.Text = e.UserState.ToString(); 
      toolStripProgressBar1.Value = e.ProgressPercentage; 
     } 

Отчетным UserState работает нормально. Но теперь, как я могу рассчитать отчет о ProgressPercentage?

ответ

1

Вы доложите процент прогресса:

backgroundWorker1.ReportProgress(0, result); 

Это должно быть в процентах от 0 до 100. Чтобы сделать это, вы должны знать, сколько работы еще предстоит сделать. Это означает, что перед выполнением работы вы подсчитываете или оцениваете работу, которая должна быть выполнена (какое количество строк содержит нужную подстроку). Когда у вас есть номер для этого, вы можете в цикле делить текущее количество на оценку и сообщать, что это номер обратно в ReportProgress.

+0

Роберт я не понял. Я знаю, что в этом случае я знаю, что есть 33 строковых отчета. Итак, я сделал: countResults ++; backgroundWorker1.ReportProgress (countResults/33, result); но деление всегда возвращается 0. Так что это неправильно. –

+0

Это другая проблема. Если работает с ints, 5/33 равно нулю. –

Смежные вопросы