.NET開発者のためのブログメディア

C#のタイマーの精度と一定間隔で処理をする方法
アプリケーションにて一定間隔で処理を行いたい場合に使用するのがタイマーです。
C#で実装をしたい場合、Windowsフォームアプリケーション やWebアプリケーションなど、アプリケーションの種類によって実装方法が異なります。
ここでは、コンソールアプリケーションの例をご紹介します。
- PG
- アプリケーションの中で、一定間隔で処理する機能をつけたいです。C#でどうやったら良いかを教えてください。
- PM
- C#ではタイマーという機能を使用します。コンソールアプリケーションでタイマーを使用して、実装してみましょう。
目次
C#のタイマーでできること
C#でタイマーを使用すると、一定間隔で処理を実行することができます。
2019年8月現在、C#で使用できるタイマーには4種類のクラスがあります。
- System.Timers.Timer
- System.Threading.Timer
- System.Windows.Forms.Timer
- System.Windows.Threading.DispatcherTimer
System.Timers.TimerクラスはWindowsアプリケーションやコンソールアプリケーションだけでなく、Webアプリケーションとしてサーバー側の処理でも使用できるように設計されています。形態を問わず使用できるので使い勝手も良いです。
今回紹介するコンソールアプリケーションではこのクラスを使用します。
スレッド処理を行う場合に使用します。
Windowsフォーム で使用するGUI向けの専用のクラスです。
WPFで使用する場合の専用のクラスです。
一般的に使用する場合は、System.Timers.Timerを理解しておけば問題ありません。
タイマーは、処理を実行する間隔を指定してインスタンスを作成し、タイマーの開始と終了の処理を実行します。
タイマーが動いている間にどんな処理を行うかを指定することで、一定間隔での処理を実現しています。
処理を実装する時に意識する部分はこれだけなので、特に難しい処理を実装する必要はありません。
C#のタイマーの精度
それでは実際にSystem.Timers.Timerクラスを使用して実装します。
サーバーベースのSystem.Timers.Timer についてはWindowsタイマーよりも精度が向上すると公式ページに書かれています。
以下にプログラムの例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Timers; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Timer timer = new Timer(1000); int count = 0; timer.Elapsed += (sender, e) => { if (count < 5) { Console.WriteLine("Hello World"); count++; } else { timer.Stop(); Console.WriteLine("終了"); } }; timer.Start(); Console.ReadKey(); } } } |
まず、以下のようにインスタンスを作成します。この時、ミリ秒で処理を実行する間隔を指定します。
1 |
Timer timer = new Timer(1000); |
一定間隔で実行する処理を記載します。timer.Elapsedの部分です。
本記事はif文を使用して、処理を5回繰り返すようにしています。5回繰り返した後は、timer.Stop();の処理で、終了します。
以下が開始する処理です。
1 |
timer.Start(); |
開始する際には、アプリケーションを起動したままにする必要があるので、以下のようにキー入力を読み込む処理を入れています。
この処理を入れないとアプリがすぐに終了してしまうので、処理が行われません。
1 |
Console.ReadKey(); |
実行すると以下のような結果になります。
5回繰り返し処理が行われることが確認できました。
また、最初にインスタンスを作成した時に、1000ミリ秒と指定したので、出力は1秒ごとに行われます。
- PG
- C#のタイマークラスを使えば、一定間隔の処理もできるんですね!
- PM
- タイマーの間隔を指定して、開始と終了の処理、繰り返し実行する処理を実装するだけなので簡単ですよ。
C#のタイマー処理はSystem.Timers.Timerで実装する
ここでは、System.Timers.Timerクラスの使い方を紹介しました。
タイマーの間隔を指定して、開始と終了の処理、繰り返し実行する処理を実装するだけなので、簡単に使用することができます。
System.Timers.Timerクラスを使用して、タイマー処理を実装してみてはいかがでしょうか。