C#
System.Windows.Forms.Timer — UIスレッド発火の本命
出典: WinForms Timer 3兄弟の使い分け — System.Windows.Forms.Timer / System.Threading.Timer / System.Timers.Timer — System.Windows.Forms.Timer — UIスレッド発火の本命
// ✅パターン1: System.Windows.Forms.Timer(UI更新の本命)
using System.Windows.Forms;
public partial class MainForm : Form
{
private Timer _uiTimer;
public MainForm()
{
InitializeComponent();
_uiTimer = new Timer
{
Interval = 1000, // 1秒ごと
};
_uiTimer.Tick += UiTimer_Tick;
_uiTimer.Start();
}
private void UiTimer_Tick(object sender, EventArgs e)
{
//ここはUIスレッド上で発火する→コントロールを直接触れる
labelClock.Text = DateTime.Now.ToString("HH:mm:ss");
dataGridView1.Refresh();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
_uiTimer.Stop();
_uiTimer.Dispose(); //終了時に解放
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「System.Windows.Forms.Timer — UIスレッド発火の本命」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン2: System.Threading.Timer(バックグラウンド計算) using System.Threading; public partial class LogMonitorForm : Form未収録
System.Threading.Timer —スレッドプール発火の軽量版
#db033bd6db6b
// ✅パターン3: System.Timers.Timer + SynchronizingObject(コンポーネント風) using System.Timers; public partial class DashboardForm : Form未収録
System.Timers.Timer + SynchronizingObject —コンポーネント風
#808a82d2d659
// ✅パターン4: Control.Invokeでクロススレッド回避 public partial class MyForm : Form { //ヘルパー: UIスレッドでアクションを実行未収録
Control.Invokeでクロススレッド例外を回避する
#bec87b013e86
// ✅パターン5:再入禁止フラグでTick重複を防ぐ public partial class HeavyTaskForm : Form { private System.Timers.Timer _timer;未収録
再入禁止フラグでTick重複を防ぐ
#94e84408937b
