System.Timers.Timer Elapsed事件未在Windows服务中触发

时间:2015-05-21 14:47:27

标签: windows c#-4.0 service timer

我最近从GoDaddy购买了一个非常弱的VPS来测试我开发的网站。我创建了一个简单的服务,我想每10秒触发一次,从我的数据库向用户发送待处理的电子邮件。在使用System.Timers.Timer之前我创建了许多服务,我从来没有遇到过任何问题。这是我在VPS上安装的第一个服务。计时器根本就没有开火。我知道这是因为我将自己的EventLog保存在txt文件中,Service的OnStart()工作并写入我的EventLog。在那之后,什么都没有......我已经在阳光下尝试了所有这些工作,而我却做不到。神秘的是,即使System.Threading.Timer的回调也不会触发。这可能是VPS的一个问题吗?请不要告诉我,我将不得不把它放在预定任务中!洛尔

我尝试过的事情:

使用timer.Enabled而不是timer.Stop 使用System.Threading.Timer。
重新排序计时器属性声明 将timer.Autoreset设置为“false”并且不在Elapsed事件中停止计时器 以本地系统和管理员身份安装服务。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using FieldEncryption;
using Microsoft.Exchange.WebServices.Data;
using System.Net;
using System.Threading;

namespace EmailsPendingSvc
{
    public partial class Service1 : ServiceBase
    {
        System.Timers.Timer timer = new System.Timers.Timer();

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            timer.Interval = 10000;
            timer.Elapsed += timer_Elapsed;
            timer.Start();
            using (StreamWriter sw = new StreamWriter(@"C:\Program Files\PHServices\EmailsPendingSvc\EventLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToShortDateString() + "  --  " + DateTime.Now.ToShortTimeString() + "  --  Service Started.");
            }
        }

        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            using (StreamWriter sw = new StreamWriter(@"C:\Program Files\PHServices\EmailsPendingSvc\EventLog.txt", true))
            {
                sw.WriteLine("Timer elapsed.");
            }
            timer.Stop();
            // Do Stuff
            timer.Start();
        }

        protected override void OnStop()
        {
            using (StreamWriter sw = new StreamWriter(@"C:\Program Files\PHServices\EmailsPendingSvc\EventLog.txt", true))
            {
                sw.WriteLine(DateTime.Now.ToShortDateString() + "  --  " + DateTime.Now.ToShortTimeString() + "  --  Service Stopped.");
            }
        }
    }
}

0 个答案:

没有答案