0

私はC#でASP.NET MVC3に取り組んでいます。forループの各反復の間に遅延を追加したい。

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

どうすればこれを行うことができますか?

4

5 に答える 5

10

他の回答が言っているように、を使用Thread.Sleepするとスレッドがスリープ状態になります...しかし、あなたがウェブアプリを書いていることを考えると、あなたが望むことをするとは思いません。

ユーザーが一度に 1 秒ずつ起こっていることを確認できるようにすることが目的の場合は、クライアント側に遅延を設定する必要があります。HTTP 応答を送信する前に 1 秒の遅延が 5 回ある場合、ユーザーは結果ページが表示されるまで 5 秒待たなければならないことを意味します。

AJAXでこれを行う必要があるようです。

編集: コメントに記載されているように、おそらくwindow.setTimeoutJavascript 呼び出しを確認する価値があります。(私は Javascript を「実行」していないので、その詳細についてはお答えできません。)

于 2012-08-14T05:32:14.637 に答える
3

最も簡単な方法は、現在のスレッドをスリープ状態にすることです。

System.Threading.Thread.Sleep (200);

ただし、Web アプリケーションのスレッドは非常に貴重なリソースであり、1 つをスリープ状態にしてもスレッドはビジーなままであることを忘れないでください。

通常、Web アプリケーションでこれを行う正当な理由はありません。
これを行う必要がある問題は、より良い方法で解決できます

于 2012-08-14T05:34:45.520 に答える
2

すでに説明したものとは別のアプローチが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特定のタイムスタンプで一連の値を生成します。

于 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 に答える