【发布时间】:2012-08-14 05:28:48
【问题描述】:
我正在使用 C# 开发 ASP.NET MVC3。 我想在 for 循环的每次迭代之间添加一些延迟。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
那么我该怎么做呢?
【问题讨论】:
-
嘿,我也需要这样做。不睡觉你是怎么做到的
标签: c# asp.net-mvc-3 for-loop timer
我正在使用 C# 开发 ASP.NET MVC3。 我想在 for 循环的每次迭代之间添加一些延迟。
for(int i=0; i<5; i++)
{
//some code
//add delay here
}
那么我该怎么做呢?
【问题讨论】:
标签: c# asp.net-mvc-3 for-loop timer
正如其他答案所说,使用Thread.Sleep 会使线程休眠......但鉴于您正在编写一个网络应用程序,我认为它不会按照您的意愿行事。
如果目标是让用户一次看到一秒钟发生的事情,您需要将延迟放在客户端。如果您在发送 HTTP 响应之前有五个一秒延迟,这仅意味着用户必须等待五秒才能看到您的结果页面。
听起来您应该使用 AJAX 来执行此操作。
编辑:正如 cmets 中所述,可能值得您查看 window.setTimeout Javascript 调用。 (我不“做”Javascript,所以恐怕我无法提供任何关于这方面的细节。)
【讨论】:
setTimeout() 给他一些搜索结果。
最简单的方法是让当前线程休眠。
System.Threading.Thread.Sleep (200);
但请记住,Web 应用程序中的线程是非常宝贵的资源,将线程置于睡眠状态仍然会使线程保持忙碌状态。
在 Web 应用程序中通常没有充分的理由这样做。
您需要这样做的任何问题都可以以更好的方式解决。
【讨论】:
已经描述的另一种方法可能是Reactive Extensions (Rx)。那里有一些方法可以及时生成值序列。在您的情况下,您可以使用以下代码。
var values = Observable.Generate(
0, // Initializer.
i => i < 5, // Condition.
i => i + 1, // Iteration.
i => i, // Result selector.
i => TimeSpan.FromSeconds(1));
var task = values
.Do(i => { /* Perform action every second. */ })
.ToTask();
values.Wait();
ToTask 调用允许您等待IObservable 完成。如果你不需要这个,你可以把它放在外面。 Observable.Generate 在特定时间戳生成一系列值。
【讨论】:
你可以使用Thread.Sleep();
int milliseconds = 5000;
Thread.Sleep(milliseconds);
这会停止当前线程的执行 5 秒。
【讨论】:
【讨论】: