[C#] タイマーで一定間隔おきに処理を実行する基本的な使い方

C#

こんにちは、リバティエンジニア[?]のたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

今回はC#における、System.Timers.Timerについて解説していきます。
プログラムを組んでいると「一定間隔で同じ処理を繰り返す」ような処理が必要になるときがありますよね。

マルチスレッドで定期的に処理を行ったりと様々な用途が予想されます。

そんな時には「System.Timers.Timer」を使用します。
このTimerを使えば指定した時間の間隔で、同じ処理を一定回数行うことができるようになります。

今回は、そんなC#のTimerについて、

・Timerの使い方

という基本的な内容から、

・Timerの種類による違い

などの応用的な使い方に関しても、初心者の方にもわかりやすく解説して行こうと思います。

C# Timerとは

そもそも「Timer」とは何なのでしょうか?
先ほども少しお話しましたが、「同じ処理を一定間隔で繰り返し行う」場合に便利に使うことができるものなんです。

似ているものに「時間計測」がありますが、これはただ時間を測るだけなので「Stopwatchクラス」というクラスを使います。
似ていますが、用途が全く違うので間違えないように注意しましょう。

「Timer」の使い方ですが、基本的には同じ処理を繰り返すものになるのですが、if文を使い条件を指定することで任意の回数で処理を止めることもできます。

if文については下の記事を参考にしてみて下さい。

[C#] 条件によって処理を変えてみる(if, else)
こんにちは、リバティエンジニアのたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。今回はC#でプログラミングしていく中で、絶対といっていいほど使...

C# Timerの使い方

では早速Timerクラスの使い方を見ていきましょう。

実は「Timer」といってもいろいろ種類がありまして、それぞれの特徴が異なっているため使い分ける必要があります。
ですが今回は、もっとも一般的な「System.Timers.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クラス」です。

今回は、4種類の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のイベントが発生する順番は?
こんにちは、リバティエンジニアのたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。Windowsフォームアプリケーションの開発をしていると、コン...
[C#] ラムダ式はこれさえ見ればOK!簡単徹底解説
こんにちは、リバティエンジニアのたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。C#を勉強していると、ほとんどの方が詰まってしまう場所といえば...
フリーランスに挑戦!準備は必要ない。~エンジニア・プログラマ編~
フリーランスになるのに必要な準備やお金の話をエンジニア・プログラマの職種について実際にフリーランスとして生計を立てている私が簡単に解説しています。これからフリーランスを検討している人だけでなく、フリーランス1年目の方にも参考になると思いますので是非御覧ください。

なにか質問があればお問い合わせフォームでお気軽にお問合せください。
可能な限りすぐにお返事します。
一流プログラマを目指して頑張りましょう!

C#
今日からワタシはプログラマ

コメント