我在 Windows 服务中使用计时器,这很简单,并且可以在事件结束时将一些数据写入文件。在这个应用程序中,我试图实现 3 种类型的案例:
事件将每天在同一时间(给定 StartTime)触发。
将在某些特定工作日触发的事件表示我只想从给定的 StartTime 开始在星期一、星期二和星期六执行此操作。
将在某些特定月份和那些月份中触发的事件 特定工作日表示我只想在 7 月和 9 月执行此操作,但在周一、周二和周六从给定的 StartTime 开始的受限日子。
到目前为止,我实施的是案例 1,我不确定如何为案例 2 和案例 3 做同样的事情。(我认为的逻辑很奇怪)。如果我在解决案例 2 中得到一些帮助,也将有助于实施案例 3。欢迎任何其他建议。
这是我的代码:
private static Timer aTimer;
public static void Main()
{
aTimer = new System.Timers.Timer(2000);
aTimer.Elapsed += OnTimedEvent;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program... ");
Console.ReadLine();
Console.WriteLine("Terminating the application...");
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
String path = @"E:\sample1.txt";
StreamWriter osw = new StreamWriter(path, true);
Console.WriteLine("Enter the case (1 or 2 or 3)");
var ch = int.Parse(Console.ReadLine());
//throw new NotImplementedException();
switch (ch)
{
default: break;
case 1:aTimer = new System.Timers.Timer();
aTimer.Elapsed += OnTimedEventCase1;
aTimer.Enabled = false;
break;
case 2: aTimer = new System.Timers.Timer();
aTimer.Elapsed += OnTimedEventCase2;
aTimer.Enabled = false;
break;
case 3: aTimer = new System.Timers.Timer();
aTimer.Elapsed += OnTimedEventCase3;
aTimer.Enabled = false;
break;
}
osw.Close();
osw = null;
}
// Elapsed Event for Case 1
private void OnTimedEventCase1(object source, ElapsedEventArgs e)
{
//throw new NotImplementedException();
Console.WriteLine("Daily Job");
Console.WriteLine("DateTime: " + DateTime.Now);
Timer theTimer = (System.Timers.Timer)source;
theTimer.Interval = 1000 * 24 * 60 * 60; // will do it daily i.e, 24 hours
theTimer.Enabled = true;
}
// Elapsed Event for Case 2
private void OnTimedEventCase2(object source, ElapsedEventArgs e)
{
// throw new NotImplementedException();
string[] days = new string[]{"Monday", "Tuesday" ,"Saturday"};
Console.WriteLine("WeekDays Job");
Console.WriteLine("DateTime: " + DateTime.Now);
Timer theTimer = (System.Timers.Timer)source;
//theTimer.Interval = I don't know how to fire event here according weekdays
//theTimer.Enabled = true;
}
// Elapsed Event for Case 3
private void OnTimedEventCase3(object source, ElapsedEventArgs e)
{
// throw new NotImplementedException();
string[] days = new string[]{"Monday", "Tuesday" ,"Saturday"};
string[] months= new string[]{"July", "September"};
Console.WriteLine("Monthly job");
Console.WriteLine("DateTime: " + DateTime.Now);
Timer theTimer = (System.Timers.Timer)source;
//theTimer.Interval = I don't know how to fire event here according months and then weekdays
//theTimer.Enabled = true;
}
虽然我可以轻松地实现几个小时甚至 1 天的经过事件,这是我需要通过 timeInterval 属性的恒定时间,但是在这里我没有得到如何为选定的工作日和选定的月份触发 Elapsed 事件。