如何每秒C#显示FOR LOOP的值

时间:2012-04-16 10:41:34

标签: c# for-loop

美好的一天, 这可能是一个简单的问题(适合所有​​人),但我不知道如何解决这个问题。

简单的问题 - 简单的答案

如果我有这段代码:

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

如果我打电话给测试方法,它会写信给我9999(当然)。我需要在标签上显示变量 i 这个循环的每一秒。我不想使用计时器 - 但你可以用Timer向我展示一个解决方案。

显示LOOP的最简单方法是什么?对不起我的英语,美好的一天。

4 个答案:

答案 0 :(得分:1)

MyLabel.Text = i.ToString();
Thread.Sleep(1000);

答案 1 :(得分: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();
}

答案 2 :(得分:0)

不太好但可以使用:

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

答案 3 :(得分: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();
 }
}

修改

这将让您看到差异。在循环运行后设置断点,您将看到iz数组填充了i值。我机器上的第一个是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());
            }
        }