【发布时间】:2023-03-22 01:49:01
【问题描述】:
我正在努力完成我的大学作业,该作业要求创建一个时间驱动的事件。报告应每天两次自动通过电子邮件发送给负责人。我需要从数据库中获取时间,我可以很容易地做到这一点。现在,我已经创建了一个这样的计时器:
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() 被执行。我不确定我应该做些什么改变。所以基本上计时器需要在一天中运行两个不同的时间。两次发送报告时,它应该默认为第二天的最早时间(如果有任何意义的话)。
感谢您的任何建议。
【问题讨论】:
-
However, the timer doesn't seem to stop.也许你应该在它被触发后关闭它?aTimer.Enabled = false. -
在 OnTimedEvent 中放置一个计数器,当它的 2 停止计时器。
-
很遗憾,他们教你将
Timer用于定时事件,而像 Windows Scheduler 这样的调度程序更适合现实世界。