Wait for a while without blocking main thread

santBart picture santBart · Dec 13, 2011 · Viewed 49.8k times · Source

I wish my method to wait about 500 ms and then check if some flag has changed. How to complete this without blocking the rest of my application?

Answer

Toneo picture Toneo · Dec 13, 2011

Thread.Sleep(500) will force the current thread to wait 500ms. It works, but it's not what you want if your entire application is running on one thread.

In that case, you'll want to use a Timer, like so:

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!");
}

You can set AutoReset to true (or not set it at all) if you want the timer to repeat itself.