C#时间驱动事件
本文关键字:事件 时间 | 更新日期: 2023-09-27 18:19:34
我正在努力完成我的大学作业,该作业要求创建一个时间驱动的事件。报告应每天两次自动通过电子邮件发送给负责人。我需要从数据库中获取时间,这很容易做到。现在,我已经创建了一个这样的计时器:
private static void getDate()
{
DateTime now = DateTime.Now;
DateTime alarm = new DateTime(2015, 10, 27, 19, 23, 0);
TimeSpan diff = alarm - now;
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to the difference in time from now to your alarm.
if (diff.TotalMilliseconds > 0)
{
aTimer.Interval = diff.TotalMilliseconds;
aTimer.Enabled = true;
}
else
{
aTimer.Enabled = false;
aTimer.AutoReset = true;
aTimer.Dispose();
}
}
初始化表单时,将执行getDate()函数来启动计时器。当计时器到达特定时间时,我运行以下代码:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Hello World!");
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load("report.xsl");
transformer.Transform("Report.xml", "Report.html");
string html = File.ReadAllText("Report.html");
SendMail(html);
}
在电子邮件发送给某人之后,我再次运行getDate()函数来更新时间。然而,计时器似乎并没有停止。它默认为间隔100.00,并运行执行的OnTimedEvent()。我不确定我应该做什么改变。因此,基本上,计时器需要在一天中运行两个不同的时间。当报告同时发送时,它应该默认为第二天的最早时间(如果有意义的话)。
谢谢你的建议。
Timer
的属性为AutoReset
,将其设置为false
可禁用它在Elapsed
事件后自动重新启动。
例如:
System.Timers.Timer aTimer = new System.Timers.Timer
{
AutoReset = false
};
当您再次调用getDate()
时,它正在创建Timer的第二个(新)实例。你的第一个计时器还在滴答作响。要解决此问题,需要将Timer实例化从getDate()方法中移出。将其移动到构造函数
//Move this to the constructor
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);