C# Windows Service与Timer(计时器)

           这两天被.NET的Timer搞得有相当晕!看来不能太相信Bill.Gates!
        事情是这样的:
        写了一个定时发短信的Windows服务,发布在服务器上后,发现短信没有发出去,于是就调试。测试了发短信部分的代码,没有问题,就初步确定为是Timer没有干活,
Google后,一
英文网站上说,不能用System.Windows.Forms.Timer,因为在Windows Service中,不能触发Tick事件;于是我检查了代码,果然,我用的正是这个Timer。
然后,就改成了System.Timers.Timer,以为万事大吉了,第二天发现,短信仍然没有发出去,于是,又怀疑是Timer的问题,又Google了下,网上又说这个Timer用在Windows  Service中也不行,说是要用System.Threading.Timer,于是又改此Timer。测试发现Windows Service读不也app.config,Google后,说是config文件名要写成
{ServiceName}.exe.config格式(如服务程序是BirthdaySMS.exe,则配置文件名应该BirthdaySMS.exe.config);之后,又发现Timer似乎还是干不活,仔细检查后,发现我的代码是这样写的:
         protected override void OnStart( string[ ] args )
         {
             Timer m_BirthdayTimer = new Timer( m_BirthdayTimer_Elapsed , null , 0 , 3600000 );
         }
      此方法执行后,Timer就被"回收"了!当然不行了!
      唉,真是好事多磨啊,终于把搞定了Windows Service :(

你可能感兴趣的:(C#)