一定間隔で処理を実行する - タイマーの利用 - C#
C#で一定間隔で処理を実行するコードを紹介します。
概要
C#で一定時間ごとに処理をする場合には、いくつか方法がありますが、この記事では、Timerコントロールを利用するコードを紹介します。
Timerコントロールを利用した方法は実装が簡単でコードがシンプルなため実装が容易です。
プログラム例
UI
Timerコントロールの設置
Timerコントロールをフォームに配置します。
Windowsフォームアプリケーションを新規作成します。フォームデザイナを開きます。
ツールボックスから"Timer"コントロールを選択します。ツールボックスの[すべてのWindowsフォーム]カテゴリと[コンポーネント]カテゴリに"Timer"コントロールはあります。どちらも同じコントロールのため、どちらかを選択してフォームにドラッグ&ドロップします。
フォームにTimerコントロールが配置されると、ウィンドウデザイナの下部に"timer1"の名称でTimerコントロールが配置されます。
UIの作成
フォームに[Button]を2つ、[TextBox]コントロールを1つ配置します。TextBoxコントロールはMultiLinesプロパティをtrueに設定し複数行テキストボックスとします。
フォームデザイナの"timer1"をクリックしてTimerコントロールを選択します。プロパティウィンドウの[稲妻]のアイコンをクリックしイベント画面に切り替えます。イベントの一覧に"Tick"イベントが表示されます。Tickイベントの右側のコンボボックス部分をダブルクリックします。
コードウィンドウが表示され、timer1コントロールのTickイベントのイベントハンドラの編集画面に切り替わります。ここにTimerコントロールで一定時間ごとに処理をするコードを記述します。
コード
過去のコードを記述します。先のTimerコントロールのTickイベントと配置した2つのボタンコントロールのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TimerControlDemo
{
public partial class FormSimpleTimerControl : Form
{
public FormSimpleTimerControl()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text += "〇";
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
}
}
解説
[button1]ボタンのクリックにより、TimerコントロールのEnabledプロパティにtrueが代入され、Timerコントロールの処理が開始します。
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
TimerコントロールのTickイベントでは下記のコードが実行されます。TextBoxの表示文字列の末尾に「〇」の文字を追加します。
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text += "〇";
}
[button2]ボタンのクリックにより、TimerコントロールのEnabledプロパティにfalseが設定され、タイマーの処理が停止します。
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
実行結果
上記のプロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。下部のテキストボックスに一定時間ごとに「〇」の文字が追加されます。
[button2]をクリックするとTimerの処理が中止され、「〇」の文字の追加が止まります。
再度[button1]をクリックするとTimerの処理が再開され、「〇」の文字の追加が始まります。
補足:インターバルを変更する場合
Timerコントロールの処理の間隔を変更する場合は、TimerコントロールのIntervalプロパティの値を変更します。
デフォルトの値は100になっており、100ミリ秒ごとにtickイベントを実行します。
Intervalプロパティの値を1000に変更します。tickイベントの実行間隔が一秒ごとになります。
プロジェクトを実行して、[button1]ボタンをクリックします。「〇」が1秒ごとに追加され、先ほどよりも実行間隔が長くなっていることが確認できます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用