0

良い一日、それは(誰にとっても)簡単な質問かもしれませんが、私はそれを解決する方法がわかりません。

簡単な質問-簡単な答え

私がこのコードを持っている場合:

public void test()
{
      for (int i = 0; i < 10000; i++)
      {
          label1.Text = i.ToString();
      }
}

テストメソッドを呼び出すと、9999(確かに)が書き込まれます。このループの1秒ごとに変数iをラベルに表示する必要があります。タイマーは使いたくないのですが、タイマーで解決策を教えてください。

LOOPを表示する最も簡単な方法は何ですか?すみません、英語でいい一日を。

4

4 に答える 4

1
MyLabel.Text = i.ToString();
Thread.Sleep(1000);
于 2012-04-16T10:44:37.640 に答える
1

BackgroundWokerクラスを使用し、そのメソッドReportProgressは、UIをロックせずに目的の動作を取得します。

void backgroundWoker_DoWork(....)
{
      for (int i = 0; i < 10000; i++)
      {
          backgroundWoker.ReportProgress(0,i.ToString());
          Thread.Sleep(1000);
      }

}

void backgroundWoker_ProgressChanged(....)
{
     label1.Text = e.UserState.ToString();
}
于 2012-04-16T10:46:43.120 に答える
0

良い方法ではありませんが、次を使用できます。

public void test()
{
      for (int i = 0; i < 10000; i++)
      {
          System.Threading.Thread.Sleep(1000);
          label1.Text = i.ToString();
      }
}
于 2012-04-16T10:46:19.827 に答える
0

甘くてシンプル

DateTime start= DateTime.Now;
for(int i = 0; i < 10000; i++)
{
 DateTime end = DateTime.Now;
 if( start.Second != end.Second )
 {
  start = end;
  label1.Text = i.ToString();
 }
}

編集

これにより、違いがわかります。ループの実行後にブレークポイントを設定すると、i 値で満たされた iz の配列が表示されます。私のマシンの最初のものは150000でした

        List<string> iz = new List<string>();
        DateTime start = DateTime.Now;
        for (int i = 0; i < 10000000; i++)
        {
            int zz = 5000;
            int yy = zz / (1 +i);
            zz = yy * i;
            DateTime end = DateTime.Now;
            if (start.Second != end.Second)
            {
                start = end;
                iz.Add(i.ToString());
            }
        }
于 2012-04-16T11:34:48.983 に答える