一定間隔で処理を実行する - タイマーの利用 - 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を愛用
掲載日: 2017-07-21
iPentec all rights reserverd.