如何在C#写的WINDOWS服务中,使线程在固定的时间运行?

只存在一个线程,这个线程希望每隔几个小时执行一次,例如每天的1点,5点,9点,13点,17点,21点!
在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!
想问问有没有什么好的方法?
我想到一个是在该线程start之前,先获得当前时间的HOUR,如果不在这几个的话,再一一判断,当前时间距以上以个时间断有多长时间,然后让线程sleep这些时间
不过我觉得这个办法太笨,有没有更好的方法呢?

放着Timer对象你咋就想不起来呢?
思想很简单,比如时间间隔是1小时

private void init()
{
...
interval = new TimeSpan(initData.CSRSetting.Interval, 0,0);//単位:1小时

timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimer);
timer.AutoReset = false;
this.StartTimer();
...
}

private void OnTimer(Object source, ElapsedEventArgs e)
{
//该干啥干啥
...
StartTimer();
}

private void StartTimer()
{
lock (this)
{
if (timer != null && interval != TimeSpan.Zero)
{
//计算这次运行完的时刻到下一次开始时刻的差值
timer.Interval = (时刻差值);
timer.Enabled = true;//这里就开始跑了
}
}
}

如果有特殊要求,你也可以重载Threading.Timer对象。

以上为非正式代码,不要直接Copy哦。
有问题再问吧。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-03-14
Timer是可以的不知道还有什么更好的方法