日期:2014-05-18  浏览次数:20797 次

Windows服 -> Timer -> 怎么设置在某一时刻触发事件 ?
bs(c#) + oracle
做了个windows服务 怎么在某一时刻触发事件
Timer控件本身的 Interval 是间隔触发的,
现在我想固定时间触发例如:23:59:59触发,其它时间睡眠,该用那个属性、方法。

------解决方案--------------------
Interval 设置成1秒,timer事件里面获取当前系统时间,如果当前系统时间等于23:59:59就作你需要作的事情,否则什么也不干不就O了
------解决方案--------------------
在设置Interval前,计算希望触发时间到系统当前时间的时间间隔,然后赋给Interval
------解决方案--------------------
3樓正解
------解决方案--------------------
触发需要用其它的事件,比如时间到了就运行TIMER事件,时间没到就不运行!这个简单啊!

比如:Form_load事件

方法1:
interval=1000(1000豪秒=1秒)
像你这个程序,需要3个TIMER
一个控制小时,一个控制分钟,一个控制秒.

方法2:
TIMER一直运行
interval=1000(1秒);
用timer.sleep(1000)睡眠1秒,睡玩它再起来!
timer中间的类容,就是不停的检测系统时间是否与你要的时间相同,如果相同就触发某事件.


------解决方案--------------------
interval后面的赋值是有限制的!好象有个最大值是几万来着,也就是最多不超过1个小时,还是几分钟吧!

如果你需要原代码的话,有个VB.NET的程序!

要的话就到http://www.vbworld.cn/bbs/index.asp?boardid=3&page=1上去下,在VB2005源代码区,TIMER定时器,俺做的,你可以下载参考一下,用C#改一下就可以了!
------解决方案--------------------
那个程序,可以每隔几小时或几分钟运行一个事件或外部程序(须修改),也可以定在某个时间运行某外部程序
------解决方案--------------------
sjm2003正解
------解决方案--------------------
用两个timer,代码如下:
-------------------------------
private void timer1_Tick(object sender, EventArgs e)
{

if (DateTime.Now.Hour.ToString() == textBox1.Text.ToString())
{
timer1.Enabled = false;
timer2.Interval = 3600000*24-1;//24小时减1秒
timer2.Enabled = true;
button1_Click(sender, e);
}
}

private void timer2_Tick(object sender, EventArgs e)
{
timer1.Interval = 1500;
timer1.Enabled = true;
timer2.Enabled = false;
}
------解决方案--------------------
前面的有点问题,应该是这样,代码如下: 
------------------------------- 
private void timer1_Tick(object sender, EventArgs e) 
{

if (DateTime.Now.Hour.ToString() == textBox1.Text.ToString()) 

timer1.Enabled = false; 
timer2.Interval = 3600000*24-1;//24小时减1秒 
timer2.Enabled = true; 
button1_Click(sender, e); 



private void timer2_Tick(object sender, EventArgs e) 

timer1.Interval = 1000; //一秒
timer1.Enabled = true; 
timer2.Enabled = false; 
}
------解决方案--------------------
很占用资源,但是还没想到更好的方法来实现..
------解决方案--------------------
楼主还不知道用Window自带的任务计划,你做一个Exe程序,放在里面就行,没有那么麻烦
我就是这么做的
------解决方案--------------------
Interval是double型,最大是1.79769313486232e308毫秒,够多少代人的了。怎么会不够用呢?