Лучшей альтернативой было бы использование класса 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();
}
}