c# - c#中For循环的时间延迟

标签 c# timer

我如何在一定的旋转后在循环中使用时间延迟? 假设:

for(int i = 0 ; i<64;i++)
{
........
}

我希望每 8 次旋转后延迟 1 秒。

最佳答案

有很多方法可以做到这一点:

  • 方法一:极其糟糕:忙等待:

    DateTime timeToStartUpAgain = whatever;

    while(DateTime.Now < timeToStartUpAgain) {}

这是一件可怕的事情;操作系统会假设你正在做有用的工作,并会分配一个 CPU 来做除了旋转之外的任何事情。永远不要这样做,除非您知道自旋只会持续几微秒。基本上,当您这样做时,您已经雇用了某人为您看表;那不经济。

  • 方法二:非常糟糕:休眠线程。

让线程休眠也是一件可怕的事情,但没有让 CPU 变热那么可怕。休眠一个线程告诉操作系统“这个应用程序的这个线程应该暂时停止响应事件并且什么都不做”。这比雇人帮你看表要好;现在你雇了一个人为你 sleep

  • 方法三:将工作分解成更小的任务。创建一个计时器。当你想要延迟时,不要做下一个任务,而是做一个计时器。当计时器触发其滴答事件时,从您停止的地方拾取任务列表。

这样可以有效地利用资源;现在你要雇人煮鸡蛋,当鸡蛋在煮的时候,他们可以 toast 。

然而,编写将工作分解为小任务的程序会很痛苦。

  • 方法四:利用C#5对异步编程的支持; 等待延迟任务并让 C# 编译器负责重组您的程序以使其高效。

缺点当然是 C# 5 目前仅处于测试阶段。

注意:从 Visual Studio 2012 开始,C# 5 正在使用中。如果您使用的是 VS 2012 或更高版本,则可以使用异步编程。

关于c# - c#中For循环的时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9946782/

相关文章:

c# - 不是那个懒惰的正则表达式匹配吗?

c# - 使用事件处理程序刷新所有 DataGrid

c# - MVC3 ValidationAttribute validationContext.memberName 为空

c# - 用于 RSSI 距离近似的卡尔曼滤波器

c# - 启用具有并发性的 Queue<T>

python - 快速精确的 Python 重复计时器

Java为JTextArea添加打字机效果

c - setwaitedtimer函数不调用c中的回调函数

java - 我正在创建一个多线程java应用程序,它模拟一个人的消费模式

iOS 动画 : CADisplayLink vs CAShapeLayer