나는 BackgroundWorker와 하나의 ProgressBar를 가지고있다. 작업 할 때 BackgroundWorker는 for 루프를 실행하고 ProgressBar로 진행 상황을보고합니다.중첩 루프 (진행률 막대)의 여러 변수를 기반으로 진행 상황을보고하려면 어떻게해야합니까?
현재보고되는 진행 상황은 정상적으로 작동하지만 원활하게 실행되지 않는 최단 루프 (xProgress)의 진행 상황입니다. 목표는 ProgressBar가 내부 루프의 진행률을 고려하여 ProgressBar가보다 원활하고 정확하게 업데이트되도록하는 것입니다.
DoWork 방법 :
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int xMax, yMax, zMax;
xMax = 10;
for (int x = 1; x <= xMax; x++)
{
yMax = 5;
for (int y = 1; y <= yMax; y++)
{
zMax = new Random().Next(50, 100);
for (int z = 1; z <= zMax; z++)
{
Thread.Sleep(5); /// The process
double xProgress = (double)x/(double)xMax;
double yProgress = (double)y/(double)yMax;
double zProgress = (double)z/(double)zMax;
/// The progress calculation:
double progressCalc = xProgress;
int progress = (int)(progressCalc * pgb.Maximum);
bgw.ReportProgress(progress);
}
}
}
}
'y-loop'가 100 % 일 때 'x'를 1 씩 늘리므로 '100 % y'가 '1 % x'이고 z 및 y가 동일하다고 말할 수 있습니다 . 그래서'var prog = xProg + yProg * 0.01d * xMax + zProg * 0.01d * yMax * 0.01d * xMax' (또는 * 그와 비슷한 것). 루프를 0에서 최대 1 대신 'max-1'로 설정해야 루프를 올바르게 계산할 수 있지만 확실하지는 않습니다. 확인해야합니다. – SimpleVar
불행히도'progressCalc'를이 수식으로 설정하면 최종 결과가 1.00d를 초과하여 ProgressBar가 오버 플로우됩니다. – DomTheDeveloper
나는 그것을 확인해야한다고 말했었다. 0에서 최대 1로 갈 건가요? – SimpleVar