複数起動 - c# タイマー 非同期




「タイマー」を実装する最良の方法は何ですか? (3)

可能な重複:
どのようにC#コンソールアプリケーションにタイマーを追加しますか?

タイマーを実装する最良の方法は何ですか? コードサンプルは素晴らしいでしょう! この質問では、「最良」とは最も信頼性が高く(失火の回数が少ない)、正確であると定義されています。 15秒の間隔を指定すると、ターゲットメソッドが15秒ごとに呼び出され、10〜20秒ごとに呼び出されることはありません。 一方、私はナノ秒の精度は必要ありません。 この例では、14.51〜15.49秒ごとにメソッドを起動できます。

https://code.i-harness.com


System.Windows.Forms.Timerクラスを使用すると、必要なものを実現できます。

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();


t.Interval = 15000; // specify interval time as you want
t.Tick += new EventHandler(timer_Tick);
t.Start();

void timer_Tick(object sender, EventArgs e)
{
      //Call method
}

stop()メソッドを使用すると、タイマーを停止できます。

t.Stop();

Timerクラスを使用します。

https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx

public static void Main()
{
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval=5000;
    aTimer.Enabled=true;

    Console.WriteLine("Press \'q\' to quit the sample.");
    while(Console.Read()!='q');
}

 // Specify what you want to happen when the Elapsed event is raised.
 private static void OnTimedEvent(object source, ElapsedEventArgs e)
 {
     Console.WriteLine("Hello World!");
 }

Elapsedイベントは、TimerオブジェクトのIntervalプロパティで指定されたXミリ秒ごとに発生します。 指定したEvent Handlerメソッドを呼び出します。上の例ではOnTimedEvent


あなたのクラスにServiceBaseを参照し、 OnStartイベントに以下のコードを入れてください:

Constants.TimeIntervalValue = 1 (時)..理想的には、この値を設定ファイルに設定する必要があります。

StartSendingMails =アプリケーションで実行する関数名。

 protected override void OnStart(string[] args)
        {
            // It tells in what interval the service will run each time.
            Int32 timeInterval = Int32.Parse(Constants.TimeIntervalValue) * 60 * 60 * 1000;
            base.OnStart(args);
            TimerCallback timerDelegate = new TimerCallback(StartSendingMails);
            serviceTimer = new Timer(timerDelegate, null, 0, Convert.ToInt32(timeInterval));
        }




.net-4.0