こんにちは、リバティエンジニア[?]のFUNAです。
現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。
今回はC#における「System.Timers.Timer」について解説していきます。
プログラムを組んでいると「一定間隔で同じ処理を繰り返す」ような処理が必要になるときがありますよね。
マルチスレッドで定期的に処理を行ったりと様々な用途が予想されます。
今回は、そんなC#のTimerについて「Timerの使い方」という基本的な内容から、「Timerの種類による違い」などの応用的な使い方に関して、初心者の方にもわかりやすく解説していこうと思います。
C# Timerとは
そもそも「Timer」とは何なのでしょうか?
先ほども少しお話しましたが、「同じ処理を一定間隔で繰り返し行う」場合に便利に使うことができるものなんです。
似ているものに「時間計測」がありますが、これはただ時間を測るだけなので「Stopwatchクラス」というクラスを使います。似ていますが、用途が全く違うので間違えないように注意しましょう。
Timerの使い方
基本的には同じ処理を繰り返すものになるのですが、if文を使い条件を指定することで任意の回数で処理を止めることもできます。
if文については下の記事を参考にしてみて下さい。
>> [C#] 条件によって処理を変えてみる(if, else)
C# Timerの使い方
では早速Timerクラスの使い方を見ていきましょう。
実は「Timer」といってもいろいろ種類がありまして、それぞれの特徴が異なっているため使い分ける必要があります。
System.Timers.Timerクラスは一般的によく使われていて、使い方もシンプルなので私も重宝しています。
Timerの使い方
「System.Timers.Timer」を宣言し、コンストラクタの引数にタイマーの間隔をミリ秒で指定します。
System.Timers.Timerのコンストラクタにより指定した間隔で発生させたい処理は「Elapsed」というTimerのイベントに記述していきます。
「Elapsed」に処理を追加できたら「Start」メソッドでタイマーの処理をスタートさせます。
流れで言うと下の感じです。
using System; using System.IO; using System.Timers; namespace Sample { class Sample { static void Main() { int num = 0; // タイマーの間隔(ミリ秒) Timer timer = new Timer(1000); // タイマーの処理 timer.Elapsed += (sender, e) => { if (num < 5) { Console.WriteLine("5回繰り返します。"); Console.WriteLine($"{num}回目です。"); num++; } else { timer.Stop(); Console.WriteLine("処理を終了しました"); } }; // タイマーを開始する timer.Start(); Console.ReadKey(); } } } /* 実行結果: 5回繰り返します。 1回目です。 5回繰り返します。 2回目です。 5回繰り返します。 3回目です。 5回繰り返します。 4回目です。 5回繰り返します。 5回目です。 */
このようにこのプログラムでは、1000ミリ秒(1秒)間隔で文字を表示して、10回繰り返して処理を終了しています。
Timerの種類による違い
ここまでは「System.Timers.Timer」について説明しましたが、冒頭でも説明したように、Timerには4種類あります。
その中でも、精度が高く一般的によく使われるのが先ほど紹介した「System.Timers.Timerクラス」です。
- System.Timers.Timer ... 今回ご紹介した、一般的に使われる精度の高いタイマー
- System.Threading.Timer ... 別スレッドで動作することが特徴のタイマー
- System.Windows.Forms.Timer ... 「Windows Form」向けに作られたタイマー
- System.Windows.Threading.DispatcherTimer ... WPF向けのタイマー
基本的には、「System.Timers.Timerクラス」を使えば問題ないでしょう。
System.Timers.Timerクラスでは実装できないような問題が起きた場合には、ほかのクラスの利用を検討してみて下さい。
まとめ
今回はTimerを使って一定間隔で処理を繰り返する方法を解説しました。
Timerにはいくつか種類がありますが、一般的には「System.Timers.Timerクラス」を使うので覚えておいてくださいね。
当ブログでは他にもC#の記事がありますので、よかったら見ていってください!
>> [C#] Windows.Formsのイベントが発生する順番は?
>> フリーランスに挑戦!準備は必要ない。~エンジニア・プログラマ編~
【2021年最新版】C#学習におすすめ本のレベル別TOP3を紹介【現役エンジニアが厳選】
現役エンジニアがおすすめするC#の本・参考書のTOP3をご紹介!本当にお勧めした本だけを厳選したので、TOP3だけを紹介します。それぞれのレベル別に分けたので、自分に合ったものを選んでください。
C#カテゴリの関連記事
【2021年最新版】C#学習におすすめ本のレベル別TOP3を紹介【現役エンジニアが厳選】
現役エンジニアがおすすめするC#の本・参考書のTOP3をご紹介!本当にお勧めした本だけを厳選したので、TOP3だけを紹介します。それぞれのレベル別に分けたので、自分に合ったものを選んでください。
【C#】 ファイルパスの徹底攻略。取得や結合、ファイルの存在チェック
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回はC#における「ファイルパス」の取り扱いについてご紹介 ...
【C#】Dictionaryの初期化はこれでOK!初期化の方法や基本を簡単解説
C#では連想配列を扱うためのクラスとして「Dictionaryクラス」があります。今回はC#での「Dictionaryクラス」について初期化の仕方などの基本から、要素の取り出しや存在確認なども解説します。
【C#入門】LINQ(リンク)とは?わかりやすく解説!
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回は、まだLINQ(リンク)を使いこなせていない方や、初 ...
【C#】型変換(キャスト)とは?初心者でも簡単な使い方を解説
今回はC#のキャストとは何なのかについて解説します。C#ではコンパイルされる時に静的に型が指定されるため、「型」が変数の「型」に暗黙的に変換することができない限り、再びその変数を宣言したりその変数とは違う型の値を代入したりすることができません。そんな時に便利なキャストがあります。
【C#】enum (列挙型)がわかる!かんたん徹底解説
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回はC#で列挙型(enum)についてお話します。 目次C ...
【C#】プロパティとは?利用するメリットはあるのか。
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回はC#で便利な機能の一つ「プロパティ」についてお話して ...
【C#】 usingステートメントとは?サンプルコードで解説
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回は自動でインスタンスを解放してくれる便利な機能「usi ...
【C#】コンストラクタとデストラクタ
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 今回は、C#におけるコンストラクタとデストラクタの役割や使 ...
【C#】例外処理でアプリケーションを安全に(try-catch-finally)
こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。 ここではプログラミングをする際に必須となってくる例外処理の ...