プログラミング

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