估计进度条的循环时间
本文关键字:循环 时间 | 更新日期: 2023-09-27 18:04:07
我目前在c#中使用循环来生成文件,但是程序实际上需要几秒钟才能完成,我觉得程序用户将受益于一个更新的进度条,告诉他们循环进行了多远,这样他们就可以估计循环何时结束,并生成所有文件。
我想知道是否有一种方法可以计算循环完成所需的时间,或者用循环更新进度条以显示循环还剩下多少进度。
这是我的循环。
String GeneratedLevelName;
int levelx = 0;
int levely = 0;
for (int i = 0; i < GmapLevelArea; i ++) {
if (levelx >= (GmapWidth - 1)) {
levelx = 0;
levely ++;
GeneratedLevelName = (GmapPrefix + "_" + levelx + "_" + levely + ".nw");
File.Copy(ApplicationDirectory + TemplateFileName, GmapDirectory + GeneratedLevelName);
GmapFile.AppendLine('"' + GeneratedLevelName + '"' + ",");
} else {
levelx ++;
GeneratedLevelName = (GmapPrefix + "_" + levelx + "_" + levely + ".nw");
File.Copy(ApplicationDirectory + TemplateFileName, GmapDirectory + GeneratedLevelName);
GmapFile.Append('"' + GeneratedLevelName + '"' + ",");
}
}
因为很难对文件进行计时。好的,我认为你应该把你的进度条建立在文件总数的基础上。
如果你有一个进度条:pb
pb.Minimum = 0;
pb.Maximum = GMapLevelArea;
然后将进度条的值设置为I value
pb.Value = i;
现在,当我通常使用这样的进度条时,我通常不会更新每次迭代。我通常在几次迭代后更新。
要做到这一点,我通常检查迭代计数:
if(i % 10 == 0) //only true when i is a multiple of 10
pb.Value = i;
然后在循环结束时,如果它不是你的更新的倍数,你可以将进度条设置为最大值或将其重置为零,让他们没有完成。
pb.Value = GMapLevelArea; or pb.Value = 0;
这取决于生成文件的一致性(它们是否都需要一秒钟,还是需要比其他文件更长的时间?)以及您是否知道要生成多少文件。在最简单的情况下,您可以通过获取要生成的文件数量来估计时间。例如,如果创建50个文件,则可以在生成文件后将进度条增加2%。