估计进度条的循环时间

本文关键字:循环 时间 | 更新日期: 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%。