C#

C# コンソールアプリでタイマ処理

更新日:

タイマの基本

タイマ処理は、「一定の周期(時間間隔)で処理を実行するもの」です。
この周期(時間間隔)は、実行したい処理によって決まるものですが、繰り返し同じ周期で行うものから、1回だけ呼び出されるもの(遅延処理)までいろいろあります。

 

コンソールアプリでもタイマ処理

Windows フォームアプリケーションには「タイマー処理」、「ポーリング処理」と言われる処理を実現するために
"System.Windows.Forms"名前空間にTimerクラスと呼ばれるクラスがあります。
こちらのクラスはデザイナでコントロールを配置してタイマイベント処理を書けば実現できるというクラスです。

ただ、"System.Windows.Forms"名前空間ですのでコンソールアプリケーションで使うには、"System.Windows.Forms"を参照に追加する必要があります。

コンソールアプリケーションで、"System.Windows.Forms"を参照に追加しなくても、System.Timers.Timerクラスを使ってタイマを使った処理を行うことができます。

System.Timers.Timerクラスのタイマを使ったサンプルプログラム

 

このプログラムは、起動すると200msec(ミリ秒)おきにTimer1_Elapsedというメソッド(イベントハンドラ)が呼びだされ、処理を行います。
タイマイベントの処理中で呼び出された回数をカウントアップして表示しています。

キーを押してプログラムを終了するまで200msec(ミリ秒)おきに何度でもタイマイベント処理を呼び続けます。

 

タイマイベントを1回だけ実行するとき

タイマイベントの処理を1回だけ実行する方法は、大きく2通りあります。

1つ目は、タイマイベントで「次は呼び出さない」ようにする方法です。

 

timer1.Enabeld = false;とすると、次からのタイマイベントが呼び出されなくなります。
タイマイベント以外の箇所でも、timer1.Enabeld = false;とするとタイマイベントを呼び出さなくなります。

timer1.Enabeld = false;とした後、timer1.Enabeld = true;とすると、trueにセットしたところから一定時間後(このプログラムの場合は200msec後)にまたタイマイベントが呼び出されます。

 

2つ目は、AutoResetプロパティを操作する方法です。

 

2つともTimer1_Elapsedを1回呼び出したら、2回目以降は呼び出されません。

 

タイマイベント(Elapsedイベント)の引数

(object sender, System.Timers.ElapsedEventArgs e)の2つで、1つ目'sender'は、System.Timers.Timerクラスオブジェクト(この例ではtimer1)です。
'e'は、System.Timers.ElapsedEventArgsクラスオブジェクトで使用可能なメンバは1つです。
SignalTimeプロパティはこのタイマイベントが発生した日付/時刻が格納されています。

 

-C#
-, , , , ,

Copyright© プログラミングテクニック集キヤミー , 2020 All Rights Reserved.