0

我目前在 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 + '"' + ",");
  }
}

任何帮助是极大的赞赏。

4

2 回答 2

1

由于很难对 File.Copy 进行计时,我认为您应该将进度条建立在已处理的文件总数上。

所以如果你有一个进度条:pb

pb.Minimum = 0;
pb.Maximum = GMapLevelArea;

然后将进度条的值设置为你我看重

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;
于 2013-03-16T13:13:16.353 回答
0

这取决于您生成的文件的一致性(它们都需要一秒钟,还是比其他文件需要更长的时间?)以及您是否知道要生成多少。在最简单的情况下,您可以通过获取要生成的文件数来估计时间。例如,如果您创建 50 个文件,则可以在生成文件后将进度条增加 2%。

于 2013-03-16T13:09:29.287 回答