サービスがあります。日付が現在の日付と等しい場合、何かを行う(メールを送信する)ことを確認したい。
毎年同じ日に発生するイベントに Windows タスク スケジューラまたはその他の方法を使用するにはどうすればよいですか (たとえば、11 月 15 日)。
日付に関連する Windows タスク スケジューラ (クラス、引数、プロパティ、メソッド) の使用例を教えてください。タイマーは使えますか?
サービスがあります。日付が現在の日付と等しい場合、何かを行う(メールを送信する)ことを確認したい。
毎年同じ日に発生するイベントに Windows タスク スケジューラまたはその他の方法を使用するにはどうすればよいですか (たとえば、11 月 15 日)。
日付に関連する Windows タスク スケジューラ (クラス、引数、プロパティ、メソッド) の使用例を教えてください。タイマーは使えますか?
2 つのオプションが表示されます
最初のオプションでは、Windows がクロック ポーリングを管理しているため、タイマーは必要ありません。2 番目のオプションでは、タイマーが適切です。どれくらいの長さで作るかはあなた次第です!
編集-めちゃくちゃ簡単なコード例
オプション 1. Windows タスク スケジューラの実行可能ファイルを呼び出し、コマンド ラインを使用してタスクを設定する -> Windows タスク スケジューラ C# でタスクをスケジュールする
schtasks /CREATE /?
コマンド プロンプトで入力して開始します。
オプション 2。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TimeToTarget
{
class Program
{
static TimeSpan m_TimeToTarget = default(TimeSpan);
static void Main(string[] args)
{
//maybe you can load this from file or take it from the commandline as commented below
//string cmd = Environment.GetCommandLineArgs();
DateTime now = DateTime.Now;
DateTime target = new DateTime(now.Year, 11, 15); //November 15th. Use todays year.
//we want to set a timer for the next occurance of Nov 15th.
if (DateTime.Now > target)
{
//increment the year because today is after Nov 15th but before new year.
target = new DateTime(now.Year, 11, 15).AddYears(1);
}
m_TimeToTarget = target.Subtract(now);
//kick off a timer to wait for the event
SetTimer(m_TimeToTarget);
Console.ReadLine(); //console needs to continue running to keep the process alive as timer runs in background thread
}
private static void SetTimer(TimeSpan timeToTarget)
{
System.Threading.Timer t = new System.Threading.Timer(DoWork, null, Convert.ToInt32(timeToTarget.TotalMilliseconds),
System.Threading.Timeout.Infinite); //dont repeat, we want the time to end when it start our work
}
private static void DoWork(object state)
{
//Do you work here!
//restart the time
SetTimer(m_TimeToTarget);
}
}
}