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);
}
}
잘 모르시겠습니까? 35 초 후에 진행률 표시 줄이 가득 차길 바라십니까? 그리고 몇 초가 지나면 끝내 죠? – Steve
예, 저는 35 초 후에 그것을 원합니다. 그리고 그것이 100 %에 도달하면 거의 36이됩니다. – blawford
나는 이것이 예상 될 수 있다고 생각한다. Windows는 실시간 OS가 아니며 ReportProgress를 호출 할 때마다 스레드 전환이 발생합니다. 성능 집약적 인 작업이므로 밀리 초가 손실되고 관찰 된 동작이 발생합니다. 이 분야의 전문가가 아니기 때문에 나는 틀린 것으로 입증 될 수있다. – Steve