Serge Vinogradov
Serge Vinogradov

Reputation: 730

How to make async pause in C#?

I have a program written in C# (Visual Studio), that works on a tray. I want it to do one action every 10 minutes. I have following code now:

while(true)
{
Thread.Sleep(10000);
// my stuff
}

But it doesn't work. It freezes a program.

Upvotes: 0

Views: 215

Answers (3)

Ghyath Serhal
Ghyath Serhal

Reputation: 7632

You should use the timer object and not create a while loop.

System.Timers.Timer _timer = new  System.Timers.Timer();
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
//30 seconds
_timer.Interval = 30000;
_timer.Start();

private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
    //do your logic
}

Upvotes: 6

Boas Enkler
Boas Enkler

Reputation: 12557

Thread.Sleep "stops" the current thread. if you only have one thread, everything is paused.

What do you want to achieve ?

Perhaps you need a second thread, or perhaps the better solution a timer which triggers a action every 10 minutes

s. Task.StartNew() or ThreadPool

Upvotes: 1

Polity
Polity

Reputation: 15130

Thread.Sleep makes the calling thead Sleep for an X ammount of time. If this thread is the frontend thread (the one responsible for handling messages), it will indeed freeze the application since any message for handling events or repainting wont be handeled untill the Thread wakes up again and gets a chance of handling the messages.

What you should do is schedule this logic every 10 seconds.

Drop a timer on your form and specify it to run each 10 seconds. Within the Tick event, call your custom action.

Upvotes: 2

Related Questions