【CSharp】解决Timer定时器的重入问题
本文最后更新于 2024-05-07,文章可能存在过时内容,如有过时内容欢迎留言或者联系我进行反馈。
代码示例
private static System.Timers.Timer aTimer = new System.Timers.Timer();
private static int inTimer = 0;
/// <summary> 设置定时器 </summary>
public static void SetTimer()
{
//读取配置时间
try
{
aTimer.Interval = 30000; //半分钟触发一次
aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
aTimer.AutoReset = true; //每到指定时间Elapsed事件是到时间就触发
aTimer.Enabled = true; //指示 Timer 是否应引发 Elapsed 事件。
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
throw;
}
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
//inTimer设置一个标志,表示一个Timer处理正在执行,下一个Timer发生的时候发现上一个没有执行完就放弃
if (Interlocked.Exchange(ref inTimer, 1) == 0)
{
Debug.WriteLine($"数据开始同步时间:{e.SignalTime}");
SetTimerStart();
System.Threading.Thread.Sleep(60000); //执行完等待越过当前分钟,使整点内只能进来一次
Interlocked.Exchange(ref inTimer, 0);
}
}
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果