如何在一个简单的线程中启动forms.timer,我有一个问题 我需要在线程内启动计时器,我该怎么做
答案 0 :(得分:2)
更好的选择是使用不需要消息循环的System.Timers.Timer
类,看起来像Windows表单或者你可以直接使用System.Threading.Timer
(如果你需要知道所有的这两个类之间的差异有a blog post with all the details):
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
the parameter-less one或the one taking an 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();
}
}
答案 1 :(得分:0)
当你使用线程时,你真的想使用System.Threading.Timer。
有关详细信息,请参阅此问题:Is there a timer class in C# that isn't in the Windows.Forms namespace?
答案 2 :(得分:0)