2014-01-17 2 views
2

Я использую фоновый поток для запуска секундомера, который я использую на ярлыке, и чтобы увеличить прогресс. Кажется, что таймер точно сохраняет время, но индикатор выполнения не достигает 100%, когда я этого ожидаю.Пробег не попадает на 100%, если ожидалось

Я пытаюсь использовать оба момента времени 35 секунд, и он достигает 100% почти в 36 лет, может ли кто-нибудь сказать мне, почему?

Максимальное значение индикатора выполнения установлено значение 350, значение устанавливается равным 0.

private int currentScore = 0; 

Stopwatch swTimer = new Stopwatch(); 

private void backgroundWorkerTimer_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    TimeSpan elapsedTime = swTimer.Elapsed; 
    labelTime.Text = String.Format("{0}.{1:%f}", elapsedTime.Seconds, elapsedTime); 
    progressBarTimer.Increment(1); 
} 

private void backgroundWorkerTimer_DoWork(object sender, DoWorkEventArgs e) 
{ 
    while (true) 
    { 
     backgroundWorkerTimer.ReportProgress(0); 
     System.Threading.Thread.Sleep(100); 
    }    
} 
+0

Непонятно, вы хотите, чтобы индикатор прогресса был заполнен через 35 секунд? И вы получите его после нескольких секунд? – Steve

+0

Да, я хочу, чтобы он был полным после 35 лет, и это почти 36, когда он достигает 100%. – blawford

+0

Я думаю, что этого можно было ожидать. Windows не является оперативной ОС, и каждый раз, когда вы вызываете ReportProgress, есть переключатель потоков. Оперативная работа, поэтому некоторые миллисекунды теряются, и вы наблюдаете поведение. Не эксперт в этой области, поэтому я мог быть доказан неправильно – Steve

ответ

0

Это, кажется, высохла, так что я не закроет его. Я закончил тем, что сделал progressBar max 345, и, похоже, он заканчивается примерно в 35 секунд, я использую его только для визуального представления времени, оставшегося в любом случае.

Было бы интересно узнать, почему 350 в качестве максимума не является точным, хотя когда labelTime продолжает идти в ногу.

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