C#でプログラムに遅延を追加するにはどうすればよいですか?
C#でプログラムに遅延を追加するにはどうすればよいですか?
回答:
あなたはThread.Sleep()
関数を使うことができます、例えば
int milliseconds = 2000;
Thread.Sleep(milliseconds);
これにより、現在のスレッドの実行が2秒間完全に停止します。
おそらく最も適切なシナリオThread.Sleep
は、メインとは異なる別のスレッドで操作を遅延させたい場合です。例:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
他のシナリオ(しばらくしてから操作を開始するなど)については、Codyの回答を確認してください。
await Task.Delay(milliseconds)
。プログラムをブロックしたくない場合は、を使用できます。これは私のために働いた:)
間隔を2〜3秒に設定したタイマーを使用します。
作成するアプリケーションのタイプに応じて、3つの異なるオプションから選択できます。
Thread.Sleep
アプリケーションがそのスレッドの入力(WinForms、WPF)を同時に処理する必要がある場合は使用しないでください。スレッドSleep
が完全にロックされ、他のメッセージを処理できなくなります。(ほとんどの場合のように)シングルスレッドアプリケーションを想定すると、おそらく意図したとおりに操作を遅延させるだけでなく、アプリケーション全体が応答を停止します。処理する「イベント」がないため、または個別のスレッド上で(これTask.Delay
はより良いオプションです)、Sleepを純粋なコンソールアプリケーションで使用しても問題ないことに注意してください。
タイマーに加えて、イベントの処理からスレッドをブロックしない非同期バージョンをSleep
使用できます(適切に使用されている場合-で無限スリープにしないでください)。Task.Delay
Sleep
.Wait()
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
C#7.1(MSDNブログの非同期メイン)を使用している場合、コンソールアプリケーションのメソッドでawait Task.Delay(2000)
も同じことが使用できます。Main
注:で操作を遅延させるSleep
と、タイマーを使用して複数の操作を開始する可能性があるために発生する競合状態を回避できるという利点がありますDelay
。残念ながら、UIベースのアプリケーションのフリーズは受け入れられないので、複数の遅延を開始した場合(つまり、ボタンのクリックによってトリガーされた場合)に何が起こるかを考える必要があります。そのようなボタンを無効にするか、タイマー/タスクをキャンセルするか、遅延を確認してください。操作は安全に複数回行うことができます。
Thread.Sleep
警告はそれほど重要ではない可能性があります。
await Task.Delay()
、コンソールアプリは実際にありそうなことバージョンとインラインコメントをしたい使用するSleep
(非非同期Main
)またはDelay
(非同期Main
)
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
またはusing
ステートメントで:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
私はこれを1000 * numSeconds
(または単に3000
)よりも好んでいますThread.Sleep
。それはあなたの意図をよりよく文書化します。
Thread.Sleep(TimeSpan)
、intにキャストしなくても直接使用できます。