.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#のTimerの使い方とは?インスタンスの生成方法や2つのクラスの違いについて紹介!

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

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#のTimerの使い方とは?インスタンスの生成方法や2つのクラスの違いについて紹介!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    システム
    エンジニア
    C#のTimerクラスはどのような働きをするのですか。
    プロジェクト
    マネージャー
    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の方が軽量で精度も高くなっています。

    システム
    エンジニア
    二つのTimerクラスの違いもよく分かりました。
    プロジェクト
    マネージャー
    それぞれの違いをよく理解して、アプリ開発に活用してください。

    C#のTimerを使いこなそう

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

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    新着案件New Job