как запустить forms.timer в простом потоке, у меня есть проблема, где я должен запустить таймер в потоке, как я могу сделать это
В документации говорится:
Этот таймер оптимизирован для использования в приложениях Windows Forms и должен использоваться в окне.
Вместо него используйте что-то вроде Thread.Sleep.
Лучшей альтернативой будет использование класса 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();
}
}
Когда вы используете потоки, вы действительно хотите использовать System.Threading.Timer.
См. этот вопрос для более подробной информации: Есть ли в C# класс таймера, который не находится в пространстве имен Windows.Forms?