C#のTimerの使い方とは?インスタンスの生成方法や2つのクラスの違いについて紹介!

公開日時:  
C#のTimerの使い方とは?インスタンスの生成方法や2つのクラスの違いについて紹介!
基本情報技術者試験の試験対策はこちら>>
SE
C#のTimerクラスはどのような働きをするのですか。
PM
Timerクラスはリアルタイム処理を行う場合に欠かせない機能です。インスタンスの生成方法や2つのクラスの違いについてご紹介しましょう。

C#のTimerとは?


C#のTimerクラスはタイマー処理に使用します。タイマー処理とは一定時間毎に処理を行うことです。例えばリアルタイムで動作するゲームやアニメーションを作る時などに、Timerクラスが役立ちます。

では早速Timerクラスを使ってみましょう。以下のC#サンプルを実行してみてください。

Timerクラスのインスタンスを生成する

上のタイマー処理のC#サンプルについて解説しましょう。まず最初に、Timerクラス型の変数のtimerを宣言します。timerをstaticによって静的フィールドとするのは、タイマー処理を行う上で、Timerのインスタンスを常に同一のものにする必要があるからです。

次に「new Timer(3000)」でtimerのインスタンスを生成します。3000とは3000ミリ秒、つまり3秒という意味です。3秒毎にタイマーイベントを発生させます。

Timerクラスのプロパティを設定する

次に「timer.Elapsed += timerEvent;」でElapsedプロパティにtimerEventメソッドを登録します。このメソッドが3秒毎に呼ばれます。timer.AutoResetをtrueにするのは繰り返し発生させるためです。このプロパティをfalseにした場合は一度しか発生しません。

次にtimer.Enabledをtrueにしていますが、これでタイマーがスタートします。

タイマー処理の内容

タイマー処理中は「Console.ReadLine()」で入力待ちをしています。Enterの入力があればStopとDisposeでタイマーを終了します。

次のtimerEventメソッドは3秒毎に実行されるタイマーイベント処理です。この中ではパラメータとして渡されるElapsedEventArgsの時間情報を表示しています。

このC#サンプルを実行すると、以下のようになります。3秒毎に現在時刻が表示されます。

Enterキーで終了します。

タイマーイベント発生 16:46:24

タイマーイベント発生 16:46:27

タイマーイベント発生 16:46:30

Intervalプロパティで間隔を変更可能

Intervalプロパティでタイマー動作中も時間の間隔を変更することができます。イベント処理をするメソッドの最初のパラメータはTimerのインスタンスが渡されるので、以下のように変更することが可能です。

実行すると以下のように1秒ずつ間隔が増えて行きます。

Enterキーで終了します。
タイマーイベント発生 19:39:24
タイマーイベント発生 19:39:28
タイマーイベント発生 19:39:33
タイマーイベント発生 19:39:39
タイマーイベント発生 19:39:46

ラムダ式も使用できる

Elapsedのメソッド登録は以下のようにC#のラムダ式を使うこともできます。こうすればtimerEventメソッドは不要になります。ラムダ式を使うと記述がスマートになるので積極的に活用しましょう。

System.Threading.Timerクラスについて

ここまでSystem.Timers.Timerクラスについて説明してきましたが、C#は他にSystem.Threading.Timerというクラスもあります。以下は上のSystem.Timers.Timerを使うC#サンプルと同じ動作をします。

ラムダ式を使用できる

「new Timer(timer_delegate, null, 3000, 3000);」で3000ミリ秒を2回指定しますが、最初の3000は最初のタイマーイベントが発生するまでの時間、次の3000はそれ以降のイベント発生の間隔となります。

なおTimerCallbackでメソッドを登録する箇所は、以下のようにC#のラムダ式を使うこともできます。System.Timers.TimerのElapsedと同じです。

System.Timers.TimerとSystem.Threading.Timerの違い

なおSystem.Threading.Timerの時間間隔の変更は、以下のC#サンプルのようにChangeメソッドを使用します。

System.Timers.TimerとSystem.Threading.Timerの違いは、System.Timers.Timerはサーバーベースで、System.Threading.Timerはスレッドプールとして使用する違いがあります。具体的には、System.Threading.Timerの方が軽量で精度も高くなっています。

SE
二つのTimerクラスの違いもよく分かりました。
PM
それぞれの違いをよく理解して、アプリ開発に活用してください。

C#のTimerを使いこなそう

C#のTimerを解説しましたが、ご理解頂けましたでしょうか。ゲームやアニメーションなどの動きがあるリアルタイム処理にはタイマー処理は欠かせません。是非活用して、素晴らしいアプリケーションを作って下さい。


FEnetへの登録は左下のチャットが便利です 経験者優遇! 最短10秒!

.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags