如题,在windows服务中使用System.Timers.Timer计时器,设置了Elapsed事件,但事件一直不能被触发。代码如下private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
      Thread.Sleep(30000);
      this.timer = new System.Timers.Timer();
      this.timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
      this.timer.Interval = 1000;
      this.timer.AutoReset = true;
      this.timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
}

解决方案 »

  1.   

    30s是我故意加上去,以便够时间附加进程在VS中调试的。OnStart中的代码断点调试看过没有问题,正常执行。但timer_Elapsed事件没有被触发。
      

  2.   

    是不是因为没启动呀 timer.start(),我不太懂,不过上次用定时器就是因为忘了写这句
      

  3.   

    this.timer.AutoReset = true;
    貌似触发一次之后就不会再触发了timer_Elapsed放点东西呢,
    不要放 messagebox,而是写个日志文件啥的
      

  4.   

    this.timer.Enabled = true;
    和 timer.start()
    效果是一样滴
      

  5.   

    它现在是连一次都不触发,timer_Elapsed里面有代码,只是我没有贴出来而已。
      

  6.   

    我觉得你重写的那个 onstart 方法都没有执行
      

  7.   

    onstart方法有执行,我断点命中了,源码就是这么多了,timer_Elapsed只是做一些输出log的工作,里面的断点没有命中
      

  8.   

    你的代码我试过 可以执行到timer的事件的 没有问题  要不你就把代码贴过来看看 this.timer.AutoReset = true;
    不是只执行一次 而是间隔执行  false的话是只执行一次
      

  9.   

    我就需要间隔执行,我是在.net2.0下开发的,服务类型是LocalService和LocalSystem都试过了。代码如下:
    private System.Timers.Timer timer;        public Service()
            {
                InitializeComponent();
            }        protected override void OnStart(string[] args)
            {
                Thread.Sleep(30000);
                this.timer = new System.Timers.Timer(); // 这里断点,能够命中进入调试
                this.timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                this.timer.Interval = 1000;
                this.timer.AutoReset = true;
                this.timer.Enabled = true;
                //this.timer.Start();
            }        /// <summary>
            /// 服务停止事件
            /// </summary>
            protected override void OnStop()
            {
                this.timer.Enabled = false;
                //this.timer.Stop();
            }        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                Config config = Config.GetConfig();  // 这里断点,没有进入调试            if (config.Status == Status.Start)
                {
                    return;
                }            Console.Write("OK");
            }
      

  10.   

    解决了,最后没有用System.Timers.Timer,改用Threading.Timer就可以了。