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

只存在一个线程,这个线程希望每隔几个小时执行一次,例如每天的1点,5点,9点,13点,17点,21点!在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!想... 只存在一个线程,这个线程希望每隔几个小时执行一次,例如每天的1点,5点,9点,13点,17点,21点!
在不论什么时间启动该服务,只要它不在这几个时间上,就不让它运行!!
想问问有没有什么好的方法?
我想到一个是在该线程start之前,先获得当前时间的HOUR,如果不在这几个的话,再一一判断,当前时间距以上以个时间断有多长时间,然后让线程sleep这些时间
不过我觉得这个办法太笨,有没有更好的方法呢?
展开
 我来答
kinohl
2008-03-12 · TA获得超过404个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:280万
展开全部
放着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哦。
有问题再问吧。
lxf_120
2008-03-14 · TA获得超过250个赞
知道小有建树答主
回答量:448
采纳率:0%
帮助的人:216万
展开全部
Timer是可以的不知道还有什么更好的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式