私はこのサービスを毎週月曜日の午前4時に実行しなければなりません。グーグルを検索私は、このコードを思い付いた:毎週月曜日に厳密に月曜日に実行されるWindowsサービス4am
Timer ServiceTimer;
DateTime scheduleTime;
private void ScheduleRun()
{
int daySet = (Convert.ToInt16(Settings.Default.DayOfWeekRun) - (int)DateTime.Today.DayOfWeek + 7) % 7;
scheduleTime = DateTime.Today.AddDays(daySet).AddHours(Convert.ToDouble(Settings.Default.TimeOfDayRun));
if (daySet == 0 && scheduleTime < DateTime.Now)
{
scheduleTime = DateTime.Today.AddDays(7).AddHours(Convert.ToDouble(Settings.Default.TimeOfDayRun));
}
}
public Airt_Service()
{
InitializeComponent();
ServiceTimer = new System.Timers.Timer();
ScheduleRun();
}
protected void ServiceTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
TimeSpan ts = new TimeSpan(7, 0, 0, 0);
runProcessCode();
}
protected override void OnStart(string[] args)
{
ServiceTimer.Interval = scheduleTime.Subtract(DateTime.Now).TotalSeconds * 1000;
ServiceTimer.Elapsed += new System.Timers.ElapsedEventHandler(ServiceTimer_Elapsed);
ServiceTimer.Start();
}
ここに欠けているように見える何?私はすでにそれをデバッグしようとしており、2分間隔で動作するようです。 1週間の間隔(ミリ秒単位)が間違っていますか?
私はこのようなもののために石英を使用しません。私はすでにオペレーティングシステムにあるスケジューラを使用します。 – TomTom
@TomTom:ああ、Windowsスケジューラは、15分の時間で動作し、コンピュータが実際にアイドル状態であることを確認するために、その15分の90%がアイドル状態であることが必要です。毎時のタスクを簡単にスケジュールすることができないスケジューラ/正常に動作します。 –
あまり知らないでください。バッチスクリプトまたは正確な時間のプログラムで待機するまで、実際には十分に正確なスケジュールを立てることができます。少し考えてみましょう。試してみてください。 1週間に1回働くためには、プログラム全体を1週間休止するよりもずっと良いです。私はあなたが言及する行動を見たことがない。 – TomTom