в чем объяснение отставания прогрессбара .. в то время как другой индикатор прогресса работает нормально (оба имеют одинаковый код)? - PullRequest
1 голос
/ 04 марта 2012

у меня два индикатора прогресса .. оба имеют одинаковые свойства ..

когда я начинаю (отправляю ..), один из них отстает на секунду, затем продолжает как 45%, а затем 53% ... но другой индикатор прогресса ... работает нормально, без задержки.

почему это происходит ... есть ли объяснение этому. я также пытался удалить отставающий pBar и скопировать этот рабочий pBar ... но все тот же.

вот код:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ProgressBarAll.Position = (int)((sumAll * 100) / sizeAll);
        ProgressBarAll.Text = ProgressBarAll.Position.ToString() + "%";
        progressBarFile.Position = (int)((sumAll * 100) / sizeAll);
        progressBarFile.Text = progressBarFile.Position.ToString() + "%";
    }

enter image description here

это действительно беспокоит меня .. я так растерялся, потому что у них один и тот же код ..

так как мне это исправить .. заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

Проблема здесь не в вашем индикаторе выполнения, а в обработке / командах, которые отслеживает индикатор выполнения? Я заметил, что один из ваших индикаторов прогресса называется прогресс файла; Системный ввод / вывод и чтение / запись диска могут не сообщаться в линейном времени или вообще без ошибок.

Вопрос в том, если он периодически останавливается и «лагает» в дисковых операциях ввода / вывода, действительно ли это неправильно ?

0 голосов
/ 04 марта 2012

Существует большая вероятность, что sumAll изменит свое значение между настройками ProgressBarAll и progressBarFile.Это потому, что вы используете ProgressChanged неправильно.

Вам нужно что-то вроде этого:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBarAll.Position = e.ProgressPercentage;
    progressBarAll.Text = e.ProgressPercentage.ToString() + "%";
    progressBarFile.Position = e.ProgressPercentage;
    progressBarFile.Text = e.ProgressPercentage.ToString() + "%";
}

и затем вызовите ReportProgress в обработчике DoWork, например:

backgroundWorker1.ReportProgress(progressPercentage);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...