C#のタイマーの精度と一定間隔で処理をする方法
アプリケーションにて一定間隔で処理を行いたい場合に使用するのがタイマーです。
C#で実装をしたい場合、Windowsフォームアプリケーション やWebアプリケーションなど、アプリケーションの種類によって実装方法が異なります。
ここでは、コンソールアプリケーションの例をご紹介します。
- プログラマー
- アプリケーションの中で、一定間隔で処理する機能をつけたいです。C#でどうやったら良いかを教えてください。
- プロジェクト
マネージャー - C#ではタイマーという機能を使用します。コンソールアプリケーションでタイマーを使用して、実装してみましょう。
C#のタイマーでできること
C#でタイマーを使用すると、一定間隔で処理を実行することができます。
2019年8月現在、C#で使用できるタイマーには4種類のクラスがあります。
- System.Timers.Timer
System.Timers.TimerクラスはWindowsアプリケーションやコンソールアプリケーションだけでなく、Webアプリケーションとしてサーバー側の処理でも使用できるように設計されています。形態を問わず使用できるので使い勝手も良いです。
今回紹介するコンソールアプリケーションではこのクラスを使用します。 - System.Threading.Timer
スレッド処理を行う場合に使用します。
- System.Windows.Forms.Timer
Windowsフォーム で使用するGUI向けの専用のクラスです。
- System.Windows.Threading.DispatcherTimer
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秒ごとに行われます。
- プログラマー
- C#のタイマークラスを使えば、一定間隔の処理もできるんですね!
- プロジェクト
マネージャー - タイマーの間隔を指定して、開始と終了の処理、繰り返し実行する処理を実装するだけなので簡単ですよ。
C#のタイマー処理はSystem.Timers.Timerで実装する
ここでは、System.Timers.Timerクラスの使い方を紹介しました。
タイマーの間隔を指定して、開始と終了の処理、繰り返し実行する処理を実装するだけなので、簡単に使用することができます。
System.Timers.Timerクラスを使用して、タイマー処理を実装してみてはいかがでしょうか。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)