我最近从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.");
}
}
}
}