0

我正在使用 C# 开发 ASP.NET MVC3。我想在 for 循环的每次迭代之间添加一些延迟。

for(int i=0; i<5; i++)
{
    //some code
    //add delay here
}

那么我该怎么做呢?

4

5 回答 5

10

正如其他答案所说,使用Thread.Sleep会使线程休眠......但鉴于您正在编写一个网络应用程序,我认为它不会按照您的意愿行事。

如果目标是让用户一次看到一秒钟发生的事情,那么您需要将延迟放在客户端。如果您在发送 HTTP 响应之前有五个一秒延迟,这仅意味着用户必须等待五秒才能看到您的结果页面。

听起来您应该使用 AJAX 来执行此操作。

编辑:如评论中所述,可能值得您查看window.setTimeoutJavascript 调用。(我不“做” Javascript,所以恐怕我无法帮助解决这方面的任何细节。)

于 2012-08-14T05:32:14.637 回答
3

最简单的方法是让当前线程休眠。

System.Threading.Thread.Sleep (200);

但请记住,Web 应用程序中的线程是非常宝贵的资源,将线程置于睡眠状态仍然会使线程保持忙碌状态。

通常没有充分的理由在 Web 应用程序中这样做。
无论问题需要你这样做,都可以以更好的方式解决

于 2012-08-14T05:34:45.520 回答
2

已经描述的另一种方法可能是反应式扩展(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在特定时间戳生成一系列值。

于 2012-08-14T06:04:18.313 回答
0

您可以使用Thread.Sleep();

int milliseconds = 5000;
Thread.Sleep(milliseconds);

这会使当前线程的执行停止 5 秒。

于 2012-08-14T05:34:09.623 回答
-1

像这样的东西怎么样

System.Threading.Thread.Sleep(1000);

Thread.Sleep 方法 (Int32)

于 2012-08-14T05:31:05.243 回答