動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

再入禁止フラグでTick重複を防ぐ

出典: WinForms Timer 3兄弟の使い分け — System.Windows.Forms.Timer / System.Threading.Timer / System.Timers.Timer再入禁止フラグでTick重複を防ぐ

再入禁止フラグでTick重複を防ぐ (csharp)#94e84408937b
// ✅パターン5:再入禁止フラグでTick重複を防ぐ
public partial class HeavyTaskForm : Form
{
    private System.Timers.Timer _timer;
    private int _busyFlag = 0;   // 0=空き/ 1=実行中
 
    public HeavyTaskForm()
    {
        InitializeComponent();
 
        _timer = new System.Timers.Timer(1000){ AutoReset = true };
        _timer.Elapsed += Timer_Elapsed;
        _timer.Start();
    }
 
    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        //既に実行中なら今回のTickはスキップ(再入禁止)
        if (Interlocked.CompareExchange(ref _busyFlag, 1, 0)!= 0)return;
 
        try
        {
            DoHeavyTask();   // 1秒以上かかる重い処理
        }
        finally
        {
            Interlocked.Exchange(ref _busyFlag, 0);   //確実にフラグを戻す
        }
    }
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #94e84408937b
  • lines: 30
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「再入禁止フラグでTick重複を防ぐ」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

4
図鑑トップ