Windows サービスでタイマーを使用しています。これはシンプルで、イベントが経過するたびにファイルにデータを書き込むことができます。このアプリケーションでは、3 種類のケースを実装しようとしています。
イベントは毎日同じ時間 (指定された StartTime) に発生します。
特定の WeekDays で発生するイベントは、特定の 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属性を渡す必要がありますが、選択した平日と選択した月の経過イベントを発生させる方法がわかりません。