VB.NET Tips - Timerコントロールの使い方
標準コントロールの中では少し異質なTimerコントロールは、ある一定時間ごとに処理を行う時には必要になります。
今回の例は、そのTimerコントロールの簡単な使い方を説明します。
Timerコントロールを使うには、フォーム上にツールボックスからTimerを選択し貼り付けます。
以下の図は、Timerコントロールを貼り付けた後の様子です。
MSDNの説明によれば以下の様になっています。
Timer コントロール・について
<プロパティ>
・Enabled :タイマーが実行されているかどうかを取得または設定します。
・Interval:取得または設定の時間 (ミリ秒単位) 前に、
Tick の最後に見つかった位置を基準としたイベントは、 Tick イベントです。
<メソッド>
・Start() :タイマーを起動します。
・Stop() :タイマーを停止します。
<イベント>
・Tick :指定したタイマーの間隔が経過し、タイマーが有効である場合に発生します。
今回の例としては、フォーム上に Timer を貼り付け Tick イベントで
現在の時刻を表示し、時計の様な動作をします。
Timerコントロールの使い方
06 | Private Sub frmTimer_Load(sender As Object , e As EventArgs) Handles Me .Load |
08 | Me .Label1.Text = Now.ToString( "hh:mm:ss" ) |
10 | Me .Timer1.Interval = 1000 |
12 | Me .Timer1.Enabled = True |
18 | Private Sub Timer1_Tick(sender As Object , e As EventArgs) Handles Timer1.Tick |
20 | Me .Label1.Text = Now.ToString( "hh:mm:ss" ) |
今回の例は、プログラム的には非常に簡単なものです。
一つ注意する点としては、Timerの間隔設定の値がミリ秒である点です。
秒単位での間隔を設定するには、その秒数を1000倍した値をTimer.Intervalに設定します。
それでは、少しプログラムに手を加えて、Timerの中断、開始が出来る様にします。
中断、開始を行う為に2個のボタンコントロールをフォームに張り付けて、処理を追加します。
上記のソースにボタンClickイベントを追加したものを、以下に示します。
Timerコントロールの停止・開始の方法
06 | Private Sub frmTimer_Load(sender As Object , e As EventArgs) Handles Me .Load |
08 | Me .Label1.Text = Now.ToString( "hh:mm:ss" ) |
10 | Me .Timer1.Interval = 1000 |
12 | Me .Timer1.Enabled = True |
18 | Private Sub Timer1_Tick(sender As Object , e As EventArgs) Handles Timer1.Tick |
20 | Me .Label1.Text = Now.ToString( "hh:mm:ss" ) |
26 | Private Sub btnStop_Click(sender As Object , e As EventArgs) Handles btnStop.Click |
34 | Private Sub btnStart_Click(sender As Object , e As EventArgs) Handles btnStart.Click |
Timerの開始・停止メソッドのStart Stopを使用し処理していますが、
EnabledプロパティをTrue / Falseに設定することでも同じことが行えます。
ここで、Timerを使う上で注意することがあるのですが、タイムTickイベントの処理が
Timerに設定したIntervalの値より掛かってしまったらどうなるかです。
そこで、タイムTickイベントの中に10秒の待ちを行う処理を入れてみました。
タイムTickイベントのみ抜粋
4 | Private Sub Timer1_Tick(sender As Object , e As EventArgs) Handles Timer1.Tick |
6 | Me .Label1.Text = Now.ToString( "hh:mm:ss" ) |
8 | System.Threading.Thread.Sleep(10 * 1000) |
タイムTickイベントの中に10秒の待ちを行う処理を入れると、
時刻の表示が10秒毎にしか変化しません。
タイムTickイベントが呼び出されて処理が終わるまでは、
次のイベントが呼び出されないことになります。
Intervalを超える処理時間が掛かった時に、次のイベントが呼び出されないことが良いかどうかは
求める仕様に関わってくると思います。
常にIntervalの時間間隔でイベントが呼び出される様にしたいのであれば、
このTimerコントロールでは無く、別の方式で行う必要があります。
この件に付いては別のページで説明したいと思います。