0

サービスがあります。日付が現在の日付と等しい場合、何かを行う(メールを送信する)ことを確認したい。

毎年同じ日に発生するイベントに Windows タスク スケジューラまたはその他の方法を使用するにはどうすればよいですか (たとえば、11 月 15 日)。

日付に関連する Windows タスク スケジューラ (クラス、引数、プロパティ、メソッド) の使用例を教えてください。タイマーは使えますか?

4

2 に答える 2

0

2 つのオプションが表示されます

  1. アプリケーションを実行する繰り返しタスクを備えた Windows タスク スケジューラ
  2. 毎日 [some_time] に日付をポーリングする Windows サービス。

最初のオプションでは、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);
        }
    }
}
于 2013-10-21T08:10:52.247 に答える