c# - 使用 Thread.Sleep 在 c# 中的循环中每次等待一秒钟

标签 c# system

我正在尝试每秒将“p”打印到屏幕上。

当我运行这个:

while (true)
    Thread.Sleep(1000); 
    Console.WriteLine("p");

它根本不打印。
但是当我运行这个时:
while (true)
    Console.WriteLine("p");
    Thread.Sleep(1000); 

无需等待即可打印。有人可以向我解释一下并建议修复吗?

最佳答案

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 , 或 forforeach等等,你使用一个块。

顺便说一句,您首先不应该使用 Thread.Sleep .它应该只用于测试代码。线程是昂贵的程序资源;不付钱 sleep !如果你想引入延迟,那么有两件事要做。在事件驱动程序中,启动一个计时器,然后在它关闭时处理计时器事件。或者,使您的程序异步并等待 Task.Delay .休眠是一种不好的做法,表明您的程序设计存在一些缺陷。

现在,你可能会说,嘿,这是一个控制台程序,我真的想在我的用户体验中引入延迟,而且我没有在后台处理任何事件等等,那么为什么不 sleep 呢?我能理解这个论点;这很方便。然而,(1) 在你还是初学者的时候就养成良好的习惯,以后你不必打破它们,(2) 程序不断发展。在某些时候,您会想要编写一个程序,该程序在 UI 暂停时保持交互并响应用户按键、网络流量或其他类似事件;如果您的线程处于休眠状态,则它们不会响应这些事件。

关于c# - 使用 Thread.Sleep 在 c# 中的循环中每次等待一秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58840334/

相关文章:

c# - 如何在不定义目标表的情况下使用 BulkCopy

time - Docker 容器 : time/timezone wrong

c - 系统函数 print 访问被拒绝

c++ - 使用 Qpr​​ocess 或系统调用 R 时如何获取输出

c# - Azure函数从服务总线读取队列消息两次

c# - 不合格的类名与系统命名空间中的新 .NET 类发生冲突

c# - 我如何单元测试 URL 在 c# 中是否有效?

c# - 有条件检测驱动器

PHP-错误-MySQL

c - ollydbg 中有很多 'printf',但 a.exe 中只有一个 'printf'