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;

次に、進行状況バーの値を i 値に設定します

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

それは、生成されるファイルの一貫性 (すべてのファイルに 1 秒かかるか、他のファイルよりも時間がかかるか) と、生成するファイルの数がわかっているかどうかによって異なります。最も簡単なケースでは、生成するファイルの数から時間を見積もることができます。たとえば、50 個のファイルを作成する場合、ファイルが生成された後にプログレス バーを 2 パーセントずつ増やすことができます。

于 2013-03-16T13:09:29.287 に答える