使用 Thread.Sleep 在 c# 中的循环中每次等待一秒钟
waiting for a second every time in a loop in c# using Thread.Sleep
我正在尝试每秒向屏幕打印 "p"。
当我运行这个:
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
它根本不打印。
但是当我 运行 这个:
while (true)
Console.WriteLine("p");
Thread.Sleep(1000);
无需等待即可打印。有人可以向我解释一下并提出修复建议吗?
你没有循环整个代码
这个:
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
与此相同:
while (true)
{
Thread.Sleep(1000);
}
Console.WriteLine("p");
您需要在希望循环执行的所有行周围显式设置大括号,否则它只会在下一条指令上循环。
您正在寻找这样的东西:
while (true)
{
Thread.Sleep(1000);
Console.WriteLine("p");
}
why didn't it work without braces?
C# 不是 Python。在Python中,程序结构用空格表示。在 C# 中,空格被完全忽略,程序结构由语言的语法决定。
在 C# 中,{ any number of statements }
形式的块本身就是一个语句。
while
的语法是
while( an expression that can be evaluated to bool )
a single statement
但是由于 { ... }
是 单个语句 ,如果您希望在 while
或 if
的正文中包含多个语句,或者for
或者foreach
等等,你用一个块。
顺便说一下,你一开始就不应该使用 Thread.Sleep。它应该只用于测试代码。线程是昂贵的程序资源;不要付钱让他们睡觉!如果你想引入延迟,那么有两件事要做。在事件驱动程序中,启动一个定时器,然后在定时器事件结束时处理该事件。或者,使您的程序异步并等待 Task.Delay
。睡觉是一种不好的做法,表明你的程序设计存在一些缺陷。
现在,你可能会说,嘿,这是一个控制台程序,我真的想在我的用户体验中引入延迟,而且我在后台没有任何事件处理等等,所以为什么不睡觉?我能理解这个论点;这很方便。但是,(1) 在您还是初学者的时候就养成良好的习惯,以后您就不必改掉它们,并且 (2) 程序会不断发展。在某些时候,你会想要编写一个程序,在 UI 暂停时保持交互并响应用户按键、网络流量或其他类似的东西;如果您的线程处于休眠状态,则它们不会响应这些事件。
我正在尝试每秒向屏幕打印 "p"。
当我运行这个:
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
它根本不打印。 但是当我 运行 这个:
while (true)
Console.WriteLine("p");
Thread.Sleep(1000);
无需等待即可打印。有人可以向我解释一下并提出修复建议吗?
你没有循环整个代码
这个:
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
与此相同:
while (true)
{
Thread.Sleep(1000);
}
Console.WriteLine("p");
您需要在希望循环执行的所有行周围显式设置大括号,否则它只会在下一条指令上循环。
您正在寻找这样的东西:
while (true)
{
Thread.Sleep(1000);
Console.WriteLine("p");
}
why didn't it work without braces?
C# 不是 Python。在Python中,程序结构用空格表示。在 C# 中,空格被完全忽略,程序结构由语言的语法决定。
在 C# 中,{ any number of statements }
形式的块本身就是一个语句。
while
的语法是
while( an expression that can be evaluated to bool )
a single statement
但是由于 { ... }
是 单个语句 ,如果您希望在 while
或 if
的正文中包含多个语句,或者for
或者foreach
等等,你用一个块。
顺便说一下,你一开始就不应该使用 Thread.Sleep。它应该只用于测试代码。线程是昂贵的程序资源;不要付钱让他们睡觉!如果你想引入延迟,那么有两件事要做。在事件驱动程序中,启动一个定时器,然后在定时器事件结束时处理该事件。或者,使您的程序异步并等待 Task.Delay
。睡觉是一种不好的做法,表明你的程序设计存在一些缺陷。
现在,你可能会说,嘿,这是一个控制台程序,我真的想在我的用户体验中引入延迟,而且我在后台没有任何事件处理等等,所以为什么不睡觉?我能理解这个论点;这很方便。但是,(1) 在您还是初学者的时候就养成良好的习惯,以后您就不必改掉它们,并且 (2) 程序会不断发展。在某些时候,你会想要编写一个程序,在 UI 暂停时保持交互并响应用户按键、网络流量或其他类似的东西;如果您的线程处于休眠状态,则它们不会响应这些事件。