таймер в потоке

как запустить forms.timer в простом потоке, у меня есть проблема, где я должен запустить таймер в потоке, как я могу сделать это

1
задан Henk Holterman 29 June 2010 в 11:37
поделиться

3 ответа

В документации говорится:

Этот таймер оптимизирован для использования в приложениях Windows Forms и должен использоваться в окне.

Вместо него используйте что-то вроде Thread.Sleep.

0
ответ дан 2 September 2019 в 23:25
поделиться

Лучшей альтернативой будет использование класса System.Timers.Timer который не нуждается в цикле сообщений и выглядит как Windows forms или вы можете напрямую использовать System.Threading.Timer (Если вам нужно знать все различия между этими двумя классами, есть статья в блоге со всеми подробностями) :

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        using (new Timer(state => Console.WriteLine(state), "Hi!", 0, 5 * 1000))
        {
            Thread.Sleep(60 * 1000);
        }
    }
}

Если вы действительно хотите System. Windows.Forms.Timer для его работы нужен цикл сообщений, вы можете запустить его в потоке, используя Application.Run либо безпараметрический, либо принимающий ApplicationContext для лучшего контроля времени жизни.

using System;
using System.Windows.Forms;

class Program
{
    static void Main()
    {
        var timer = new Timer();
        var startTime = DateTime.Now;
        timer.Interval = 5000;
        timer.Tick += (s, e) =>
        {
            Console.WriteLine("Hi!");
            if (DateTime.Now - startTime > new TimeSpan(0, 1, 0))
            {
                Application.Exit();
            }
        };
        timer.Start();
        Application.Run();
    }
}
2
ответ дан 2 September 2019 в 23:25
поделиться

Когда вы используете потоки, вы действительно хотите использовать System.Threading.Timer.

См. этот вопрос для более подробной информации: Есть ли в C# класс таймера, который не находится в пространстве имен Windows.Forms?

0
ответ дан 2 September 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: