C#
System.Timers.Timer + SynchronizingObject —コンポーネント風
出典: WinForms Timer 3兄弟の使い分け — System.Windows.Forms.Timer / System.Threading.Timer / System.Timers.Timer — System.Timers.Timer + SynchronizingObject —コンポーネント風
// ✅パターン3: System.Timers.Timer + SynchronizingObject(コンポーネント風)
using System.Timers;
public partial class DashboardForm : Form
{
private System.Timers.Timer _timer;
public DashboardForm()
{
InitializeComponent();
_timer = new System.Timers.Timer(2000)// 2秒ごと
{
AutoReset = true,
SynchronizingObject = this, // ← Formを指定するとUIスレッド上で発火
};
_timer.Elapsed += Timer_Elapsed;
_timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
// SynchronizingObject = thisのおかげでUIスレッド上で動く
labelMetrics.Text = $"最終更新: {e.SignalTime:HH:mm:ss}";
chartControl1.Refresh();
}
private void DashboardForm_FormClosing(object sender, FormClosingEventArgs e)
{
_timer.Stop();
_timer.Dispose();
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「System.Timers.Timer + SynchronizingObject —コンポーネント風」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅パターン1: System.Windows.Forms.Timer(UI更新の本命) using System.Windows.Forms; public partial class MainForm : Form未収録
System.Windows.Forms.Timer — UIスレッド発火の本命
#c9ab3217e3d2
// ✅パターン2: System.Threading.Timer(バックグラウンド計算) using System.Threading; public partial class LogMonitorForm : Form未収録
System.Threading.Timer —スレッドプール発火の軽量版
#db033bd6db6b
// ✅パターン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
