私のメソッドが約500ミリ秒待機してから、一部のフラグが変更されたかどうかを確認したいと思います。アプリケーションの残りの部分をブロックせずにこれを完了するにはどうすればよいですか?
Thread.Sleep(500)
は、現在のスレッドを強制的に500ms待機させます。それは機能しますが、アプリケーション全体が1つのスレッドで実行されている場合は、望みどおりではありません。
その場合は、次のようにTimer
を使用します。
using System.Timers;
void Main()
{
Timer t = new Timer();
t.Interval = 500; // In milliseconds
t.AutoReset = false; // Stops it from repeating
t.Elapsed += new ElapsedEventHandler(TimerElapsed);
t.Start();
}
void TimerElapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("Hello, world!");
}
タイマーを繰り返したい場合は、AutoReset
をtrueに設定する(またはまったく設定しない)ことができます。
Sleep
のようにスレッドをブロックすることなく、タイマーよりもはるかに少ないコードでawait Task.Delay(500);
を使用できます。
質問がよくわかりません。
チェックする前にブロックする場合は、Thread.Sleep(500);
を使用します
X秒ごとに非同期でチェックする場合は、 Timer
を使用して、xミリ秒ごとにハンドラーを実行できます。
これは現在のスレッドをブロックしません。
問題のメソッドがアプリケーションの他の部分とは異なるスレッドで実行されている場合は、次のようにします。
Thread.Sleep(500);
System.Threading.Thread.Sleep(500);
更新
これにより、アプリケーションの残りの部分はブロックされず、メソッドを実行しているスレッドのみがブロックされます。
タイマーを使うとうまくいくはずです
スレッドを使用する必要がある場合は、ここに例があります
void Main()
{
System.Threading.Thread check= new System.Threading.Thread(CheckMethod);
check.Start();
}
private void CheckMethod()
{
//Code
Thread.Sleep(500);
}
非同期タスク:
var task = new Task (() => function_test()); task.Start();
public void function_test() { `Wait for 5000 miliseconds` Task.Delay(5000);` }