2014-01-17 5 views
2

레이블에 사용중인 스톱워치를 실행하고 진행률 표시 줄을 증가시키기 위해 백그라운드 스레드를 사용하고 있습니다. 타이머는 정확하게 시간을 지키고있는 것처럼 보이지만 예상 할 때 진행률 막대가 100 %를 치지 않습니다.예상대로 진행 막대가 100 %에 도달하지 않습니다.

시간을 35 초로 늘리고 거의 36 초에 100 %를 기록하려고합니다. 아무도 그 이유를 말할 수 있습니까?

진척 바의 최대 값이 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 초 후에 그것을 원합니다. 그리고 그것이 100 %에 도달하면 거의 36이됩니다. – blawford

+0

나는 이것이 예상 될 수 있다고 생각한다. Windows는 실시간 OS가 아니며 ReportProgress를 호출 할 때마다 스레드 전환이 발생합니다. 성능 집약적 인 작업이므로 밀리 초가 손실되고 관찰 된 동작이 발생합니다. 이 분야의 전문가가 아니기 때문에 나는 틀린 것으로 입증 될 수있다. – Steve

답변

0

로 설정됩니다. 나는 progressBar 최대 345를 만드는 것을 끝내었다. 그리고 그것은 약 35 초에 끝이 나는 것처럼 보인다, 나는 단지 시간의 시각적 표현을 위해 그것을 어떻게해서든지 남겨두기 위해 사용하고있다.

왜 labelTime이 유지 될 때 350이 최대 값으로 정확하지 않은지 알고 싶습니다.