C#windows服务计时器问题
public partial class Service1 : ServiceBase
{
System.Timers.Timer timer1; //计时器
string message = "Test Message 调用记录!";
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//DateTime dtNow = DateTime.Now;
//if (dtNow.Hour < 24)
//{
// int hour = 24 - dtNow.Hour;
// int minite = 60 - dtNow.Minute;
// int miao = 60 - dtNow.Second;
// int sleeptime = (hour * 60 * 60 * 1000) + (minite * 60 * 1000) + (miao * 1000);
//}
timer1 = new System.Timers.Timer();
timer1.Interval = 24 * 60 * 60 * 1000; //设置计时器事件间隔执行时间
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
protected override void OnStop()
{
this.timer1.Enabled = false;
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try {
//执行通知运营
}
catch (Exception ex)
{
message = ex.Message;
File.WriteAllText(@"D:\SubOrderWebSerErrorLog\Error-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", DateTime.Now.ToString() + "|" + message + Environment.NewLine);
}
}
}
现在是只要服务启动就会自动每24小时执行一次,我希望是,如果我第一次启动服务的时间是16:00,那么就等待8个小时,然后再每天24点的时候执行一次通知运营的函数! 求大神显灵! timer service Windows?服务
[解决办法]
public partial class Service1 : ServiceBase
{
System.Timers.Timer timer1; //计时器
string message = "Test Message 调用记录!";
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//DateTime dtNow = DateTime.Now;
//if (dtNow.Hour < 24)
//{
// int hour = 24 - dtNow.Hour;
// int minite = 60 - dtNow.Minute;
// int miao = 60 - dtNow.Second;
// int sleeptime = (hour * 60 * 60 * 1000) + (minite * 60 * 1000) + (miao * 1000);
//}
timer1 = new System.Timers.Timer();
DateTime now = DateTime.Now;
if (now.Hour != 0)
{
int interval = 0;
DateTime nextDay = now.AddDays(1).Date;//得到下一天0点的时间
TimeSpan ts = nextDay - now;//计算时间差
timer1.Interval = Convert.ToInt32(ts.TotalMilliseconds);
}
timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
timer1.Enabled = true;
}
protected override void OnStop()
{
this.timer1.Enabled = false;
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer1.Interval = 24 * 60 * 60 * 1000;//设置时间间隔
try
{
//执行通知运营
}
catch (Exception ex)
{
message = ex.Message;
File.WriteAllText(@"D:\SubOrderWebSerErrorLog\Error-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", DateTime.Now.ToString() + "
[解决办法]
" + message + Environment.NewLine);
}
}
}