我写了一个服务程序,里面用了是timer控件,关键代码如下
protected override void OnStart(string[] args)
{
FileStream fs = new FileStream(@"c:\ETLConfig.txt", FileMode.Open);
StreamReader m_str = new StreamReader(fs);
StartTime = m_str.ReadLine();
ToEmailAdress = m_str.ReadLine();
fs.Close();
//定义定时器,每一分钟震荡一次
Timer atimer = new Timer();
atimer.AutoReset = true;
atimer.Start();
atimer.Interval = 1000 * 60;
atimer.Elapsed += new ElapsedEventHandler(atimer_Elapsed);
} void atimer_Elapsed(object sender, ElapsedEventArgs e)
{
//获得时钟的时间 int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
// 定制时间; 读取文本文件中的数据,确定执行时间
int iHour = Convert.ToInt16(StartTime.Substring(0, 2));
int iMinute = Convert.ToInt16(StartTime.Substring(2, 2));
// int iSecond = 00; if (intHour == iHour && intMinute == iMinute)
{
//执行存储过程
ExecutePro();
} }
其中,startTime是从文件中读取出来,我上班时能够执行过程,可是我设成晚上时老是不能执行?请问是什么原因?
protected override void OnStart(string[] args)
{
FileStream fs = new FileStream(@"c:\ETLConfig.txt", FileMode.Open);
StreamReader m_str = new StreamReader(fs);
StartTime = m_str.ReadLine();
ToEmailAdress = m_str.ReadLine();
fs.Close();
//定义定时器,每一分钟震荡一次
Timer atimer = new Timer();
atimer.AutoReset = true;
atimer.Start();
atimer.Interval = 1000 * 60;
atimer.Elapsed += new ElapsedEventHandler(atimer_Elapsed);
} void atimer_Elapsed(object sender, ElapsedEventArgs e)
{
//获得时钟的时间 int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
// 定制时间; 读取文本文件中的数据,确定执行时间
int iHour = Convert.ToInt16(StartTime.Substring(0, 2));
int iMinute = Convert.ToInt16(StartTime.Substring(2, 2));
// int iSecond = 00; if (intHour == iHour && intMinute == iMinute)
{
//执行存储过程
ExecutePro();
} }
其中,startTime是从文件中读取出来,我上班时能够执行过程,可是我设成晚上时老是不能执行?请问是什么原因?
atimer.Start();
atimer.Interval = 1000 * 60;
atimer.Elapsed += new ElapsedEventHandler(atimer_Elapsed); 把第一行写到后面,不是开始以后再转换,是转化后再开始。。
其次你可以试试 timer.Tick 事件
timer.Tick:当指定的计时器间隔已过去而且计时器处于启用状态时发生。
timer.Elapsed: 达到间隔时发生。