技術Tips

C#でTimerを使って一定周期で処理を呼ぶ方法

アプリケーションを作っていると、一定間隔で周期的に実行する処理を実装したいときがあります。

一定周期で何かの状態を確認したり、あるいは自身の状態を報告したりといった具合です。

C#では、TimerクラスとAutoResetEventを使うことで、定期的な処理の呼び出しを簡単に実装することができます。

この記事では一定周期である処理を実行したい場合の実装方法を、サンプルと共に解説します。

Timerクラスを使った周期的な処理

コードのサンプルです。

 

ここで使っているクラスは以下の3つ。

  • AutoResetEvent
  • TimerCallback
  • Timer

 

それぞれ詳細を説明します。

AutoResetEvent

MSDN:”イベントが発生した事を待機中のスレッドに通知します”

パッと見よく分からないですが、要するに、AutoResetEventクラスは、複数のスレッドを同期して動作させたい場合に設定する待機ハンドルです。

 

AutoResetEventはシグナル状態(処理のブロッキング)のリセットを自動でやってくれます。

コンストラクタはbooleanで、初期のシグナル状態を指定します。

  • true=シグナル状態
  • false=非シグナル状態

 

WaitOne(TimeSpan, Boolean)メソッドのTimeSpanには待機する秒数を指定。

無制限に待機したい時は-1。

 

booleanはfalseにしてください。詳細を知りたいときはMSDNのサイトを見てください。

 

TimerCallback

定期的に呼びたい処理を格納するデリゲート。

Timer

MSDN:”指定した間隔で、スレッドプール スレッドでメソッドを実行するための機構を提供します”

 

ここでのTimerはSystem.Threading.Timer。

 

コンストラクタは、

Timer(TimerCallback, Object, Int(開始), Int(インターバル))

指定した時間感覚で、インターバル(ms)で指定した時間ごとにTimerCallbackを呼び出します。

 

サンプルではインターバルに60000を指定したから、60秒ごとにイベントが発生します。

さいごに

C#で一定周期で定期的に処理を呼び出す方法を紹介しました。

サンプルをコピペしてTimerCallbackに入れるメソッドを目的のものに入れ替えれば動きます。

便利なサービス、見逃していませんか?

もはや生活に欠かせない存在となったAmazonプライム。

その便利な特典やメリットをまとめましたので、まだAmazonプライム会員でない方は要チェックです。

【最新版】Amazonプライムのメリットとは?

RELATED POST