таймер внутри потока - PullRequest
1 голос
/ 29 июня 2010

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

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Лучшей альтернативой было бы использование класса System.Timers.Timer, который не нуждается в цикле сообщений и выглядит как Windows, или вы можете напрямую использовать 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();
    }
}
0 голосов
/ 29 июня 2010

Документация гласит:

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

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

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

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

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

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