代码如下,在asp.net中 使用System.Timers.Timer设置定时器。在时间间隔在10分钟以下时,定时器事件可以正常执行,OnElapsedEvent事件中的log输出正常写入,但是在间隔大于10分钟的时候,OnElapsedEvent事件中的log输出只会执行一次,甚至不执行。但是两种情况下Start方法中的log均正常输出。求大神指点。 public class TimerJob
{
ILog logger = LogManager.GetLogger("errorMsg");
string timerXmlUrl = AppDomain.CurrentDomain.BaseDirectory + "TimerSpace\\TimerConfig.xml"; public TimerJob()
{ } public void Start()
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 开始" + "\r\n");
try
{
Timer timer = timer = new Timer(1000 * 60 * 60 * 4);
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
timer.Start();
}
catch (Exception e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定时器错误! ErrorMsg:" + e.Message + "\r\n");
} logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 结束" + "\r\n");
} /// <summary>
/// Timer的Elapsed事件执行的方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnElapsedEvent(Object sender, ElapsedEventArgs e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定时器执行!");
}
}
{
ILog logger = LogManager.GetLogger("errorMsg");
string timerXmlUrl = AppDomain.CurrentDomain.BaseDirectory + "TimerSpace\\TimerConfig.xml"; public TimerJob()
{ } public void Start()
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 开始" + "\r\n");
try
{
Timer timer = timer = new Timer(1000 * 60 * 60 * 4);
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
timer.Start();
}
catch (Exception e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定时器错误! ErrorMsg:" + e.Message + "\r\n");
} logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 结束" + "\r\n");
} /// <summary>
/// Timer的Elapsed事件执行的方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnElapsedEvent(Object sender, ElapsedEventArgs e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定时器执行!");
}
}
如下:
Timer timer = timer = new Timer(1000 * 60 * 60 * 4);
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
timer.Start();
// 立即执行一次
OnElapsedEvent(null, null);