C#

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

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

 

今回はC#における「System.Timers.Timer」について解説していきます。

プログラムを組んでいると「一定間隔で同じ処理を繰り返す」ような処理が必要になるときがありますよね。

 

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

 

そんな時には「System.Timers.Timer」を使用します。この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のイベントが発生する順番は?

>> [C#] ラムダ式はこれさえ見ればOK!簡単徹底解説

>> フリーランスに挑戦!準備は必要ない。~エンジニア・プログラマ編~

Copyright© FUNA BLOG , 2020 All Rights Reserved.