美好的一天, 这可能是一个简单的问题(适合所有人),但我不知道如何解决这个问题。
简单的问题 - 简单的答案。
如果我有这段代码:
public void test()
{
for (int i = 0; i < 10000; i++)
{
label1.Text = i.ToString();
}
}
如果我打电话给测试方法,它会写信给我9999(当然)。我需要在标签上显示变量 i 这个循环的每一秒。我不想使用计时器 - 但你可以用Timer向我展示一个解决方案。
显示LOOP的最简单方法是什么?对不起我的英语,美好的一天。
答案 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());
}
}