Спите в цикле, когда приложение работает, но слишком мало спит - PullRequest
6 голосов
/ 19 июня 2010
private static void Main(string[] args)
{
    for (;;)
    {
        TemporaryCityTool.TemporaryCityTool.AddCity();
        Console.WriteLine("waiting...");
        Thread.Sleep(3600);
    }
}

почему Thread.sleep не работает.Я получаю сообщение, ожидающее все время.Я хочу, чтобы приложение подождало 10 минут, а затем продолжило работу.

Ответы [ 6 ]

15 голосов
/ 19 июня 2010

Thread.Sleep принимает значение в миллисекундах, а не в секундах, поэтому текущему потоку предписывается ждать только 3,6 секунды. Если вы хотите подождать 10 минут, используйте:

Thread.Sleep(1000 * 60 * 10);  // 600,000 ms = 600 sec = 10 min

Однако, вероятно, это неуместное использование Sleep. Попробуйте вместо этого использовать таймер, чтобы получить что-то вроде:

// Fire SomeAction() every 10 minutes.
Timer timer = new Timer(o => SomeAction(), null, 10 * 60 * 1000, -1);

См. этот поток StackOverflow для получения более подробной информации об этом.

3 голосов
/ 19 июня 2010

Аргумент метода Sleep указывается в миллисекундах, поэтому, если вы хотите спать в течение 10 минут:

Thread.Sleep(10 * 60 * 1000);
2 голосов
/ 19 июня 2010

3600 - 3,6 секунды.Если вы хотите, чтобы он спал в течение 10 минут, вы должны установить его на 600000.

Thread.Sleep(1000 * 60 * 10);  // Milliseconds(1000) * Seconds(60) * Minutes(10)

Что равно:

Thread.Sleep(600000);
1 голос
/ 19 июня 2010

10 минут в миллисекундах - это 600 000. Ваш сон будет ждать только 3,6 секунды. Часто бывает проще использовать интервал времени:

Thread.Sleep(new TimeSpan(0,10,0));
1 голос
/ 19 июня 2010

thrad.sleep в миллисекундах 10 минут будут thread.sleep (1000 * 60 * 10)

Почему вы используете thread.sleep, может быть лучше использовать таймер

0 голосов
/ 19 июня 2010

спасибо, моя большая ошибка.Джон Феминелла, я использую тему.

private static void Main(string[] args)
        {
            Thread thrd1 = new Thread(new ThreadStart(Trmain));

            thrd1.Start();
        }

        private static void Trmain()
        {
            for (; ; )
            {
                Console.WriteLine("waiting 10 minutes...");
                Thread.Sleep(1000 * 60 * 10);
            }
        } 

thx all

...