0

美好的一天,这可能是一个简单的问题(对每个人来说),但我不知道如何解决这个问题。

简单的问题 - 简单的答案

如果我有这个代码:

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

如果我调用测试方法,它会写给我 9999(肯定)。我需要在标签上显示变量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();
 }
}

编辑

这将使您看到差异。在循环运行后设置断点,您将看到 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());
            }
        }
于 2012-04-16T11:34:48.983 回答