为什么进度条显示从结束到开始倒计时的进度
本文关键字:开始 倒计时 显示 为什么 结束 | 更新日期: 2023-09-27 18:34:53
int countUploadMsg = 0;
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
int counter = 0;
allLoadedMessages = new List<OpenPop.Mime.Message>();
OpenPop.Mime.Message loadedMessage = null;
DirectoryInfo di = new DirectoryInfo(@"e:'test'");
FileInfo[] files = di.GetFiles();
foreach (FileInfo file in files)
{
loadedMessage = OpenPop.Mime.Message.Load(file);
allLoadedMessages.Add(loadedMessage);
int nProgress = (files.Length - counter + 1) * 100 / files.Length;
backgroundWorker2.ReportProgress(nProgress);
counter += 1;
}
}
private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pbt1.Value = e.ProgressPercentage;
pbt1.Text = e.ProgressPercentage.ToString() + "%";
pbt1.Invalidate();
lvnf.Items.Add(new ListViewItem(new string[]
{
allLoadedMessages[countUploadMsg].Headers.From.ToString(), //From Column
allLoadedMessages[countUploadMsg].Headers.Subject, //Subject Column
allLoadedMessages[countUploadMsg].Headers.DateSent.ToString() //Date Column
}));
countUploadMsg += 1;
}
变量pbt1
是 ProgressBar
。
我看到的是 100% 的ProgressBar
绿色,文本也是 100%,然后它开始向后移动绿色和文本 100% 99% 98%....
也许我正在做的计算有些事情:
int nProgress = (files.Length - counter + 1) * 100 / files.Length;
而且files.Length
也应该files.Length-1
?
是的,你做对了。这是你的计算。
int nProgress = (files.Length - counter + 1) * 100 / files.Length;
你的counter
因为counter += 1;
而增加,而你的files.Length
是恒定的。那么由于上面的计算,nProgress
肯定会变得越来越少。因此,您可以 100% 降至 0%。
您是否应该反过来做,即:使用计数器作为渐进指标?
int nProgress = counter * 100 / files.Length; //use counter here...
此外,你可能希望在调用后台辅助角色进度之前增加计数器:
foreach (FileInfo file in files)
{
loadedMessage = OpenPop.Mime.Message.Load(file);
allLoadedMessages.Add(loadedMessage);
counter += 1; //put before the progress;
int nProgress = counter * 100 / files.Length;
backgroundWorker2.ReportProgress(nProgress);
}