WinFormsで1秒ごとにイベントハンドラを実行する方法
C# の WinForms アプリケーションでは、一定間隔ごとに処理を実行したいケースがよくあります。
例えば「時計の表示を更新したい」「定期的にデータをチェックしたい」といった場合です。
ここでは、WinForms の Timer クラスを使って「1秒ごとにイベントハンドラを実行する」仕組みを解説します。
1. Timerの基本
WinForms には System.Windows.Forms.Timer というクラスが用意されています。
この Timer は、UI スレッド上で動作するため、フォーム上のラベルやコントロールを安全に更新できる特徴があります。
主なプロパティとイベントは以下の通りです:
- Interval : ミリ秒単位で間隔を指定(1000 = 1秒)
- Enabled : タイマーを有効化/無効化
- Tick イベント : 指定した間隔ごとに呼ばれるイベント
2. サンプルコード
以下のサンプルでは、フォームに Label を置き、1秒ごとに「現在時刻」を更新する処理を実装しています。
using System;
using System.Windows.Forms;
namespace TimerSample
{
public partial class Form1 : Form
{
private readonly Timer _timer = new Timer();
public Form1()
{
InitializeComponent();
// Timer設定
_timer.Interval = 1000; // 1000ms = 1秒
_timer.Tick += Timer_Tick; // イベントハンドラ登録
_timer.Start(); // タイマー開始
}
private void Timer_Tick(object? sender, EventArgs e)
{
// 1秒ごとにラベルを更新
label1.Text = DateTime.Now.ToString("HH:mm:ss");
}
}
}
3. 解説
- Timer.Interval = 1000;→ 1秒ごとに Tick イベントが発生するよう設定。
- Timer.Tick += Timer_Tick;→ 1秒経過するたびに Timer_Tick メソッドが呼ばれる。
- label1.Text = DateTime.Now.ToString(“HH:mm:ss");→ ラベルに現在時刻を表示。
4. 注意点
- UIスレッドで動作する
- System.Windows.Forms.Timer は UI スレッドで処理されるため、直接コントロールを操作して問題ありません。
- 逆に、バックグラウンド処理が必要な場合は System.Timers.Timer や System.Threading.Timer を検討します。
- 精度はミリ秒単位ではない
- Windows のメッセージループに依存するため、厳密な精度は保証されません。
- 秒単位の更新(時計やUIリフレッシュなど)には十分です。
5. 応用例(スタート/ストップボタン)
ユーザー操作でタイマーを制御したい場合は、次のように Start / Stop を呼び出します。
private void btnStart_Click(object sender, EventArgs e)
{
_timer.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
_timer.Stop();
}
まとめ
- WinForms では System.Windows.Forms.Timer を使うと簡単に「一定間隔処理」が実現できる。
- Interval に 1000 を指定すれば、1秒ごとに Tick イベントが発生する。
- UI スレッドで動作するので、ラベルやテキストボックスの更新もそのまま行える。
実際のアプリケーションでは、時計表示、残り時間のカウントダウン、定期チェック処理など、幅広く活用できます。
訪問数 4 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません