代码如下,在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") + " 定时器执行!");
        }
    }

解决方案 »

  1.   

    不会立即执行的,到了间隔时间会执行,看你那个间隔时间是4小时后执行,可以手动调用一次OnElapsedEvent。
    如下:
    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);
      

  2.   

    Timer timer = timer = new Timer(1000 * 60 * 10)