Как сделать асинхронную паузу в C #? - PullRequest
0 голосов
/ 24 октября 2011

У меня есть программа, написанная на C # (Visual Studio), которая работает на панели задач.Я хочу, чтобы он делал одно действие каждые 10 минут.У меня есть следующий код:

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

Но это не работает.Замораживает программу.

Ответы [ 3 ]

6 голосов
/ 24 октября 2011

Вы должны использовать объект таймера, а не создавать цикл while.

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
}
2 голосов
/ 24 октября 2011

Thread.Sleep заставляет вызывающего the Sleep в течение X времени.Если этот поток является внешним потоком (отвечающим за обработку сообщений), он действительно замораживает приложение, поскольку любое сообщение для обработки событий или перерисовки не будет обрабатываться до тех пор, пока поток не проснется снова и не получит возможность обработки сообщений.

Что вам нужно сделать, так это запланировать эту логику каждые 10 секунд.

Удалите таймер на форме и укажите, что он запускается каждые 10 секунд.В рамках события Tick назовите свое настраиваемое действие.

1 голос
/ 24 октября 2011

Thread.Sleep «останавливает» текущий поток.если у вас есть только один поток, все приостановлено.

Чего вы хотите достичь?

Возможно, вам нужен второй поток или, возможно, лучшее решение - таймер, который запускает действие каждые 10 минут

с. Task.StartNew () или ThreadPool

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...