C# 精确的三分钟时间间隔
在我的报告中,我询问了将时间值四舍五入到最接近的第三分钟的问题。 现在我的System.Threading.Timer出现了一些问题,当第三分钟到来时,它必须工作。我谨此陈辞:C# 精确的三分钟时间间隔,c#,.net,datetime,timer,C#,.net,Datetime,Timer,在我的报告中,我询问了将时间值四舍五入到最接近的第三分钟的问题。 现在我的System.Threading.Timer出现了一些问题,当第三分钟到来时,它必须工作。我谨此陈辞: private System.Timers.Timer WorkTimer; //... public void StartProccessing() { WorkTimer = new System.Timers.Timer(); WorkTimer.AutoReset = false; WorkTimer.Elaps
private System.Timers.Timer WorkTimer;
//...
public void StartProccessing()
{
WorkTimer = new System.Timers.Timer();
WorkTimer.AutoReset = false;
WorkTimer.Elapsed += new ElapsedEventHandler(WorkTimer_Elapsed);
StartWorkTimer();
}
//...
private void StartWorkTimer()
{
WorkTimer.Interval = (CurrentTime.AddMinutes(3) - DateTime.Now).TotalMilliseconds;
WorkTimer.Start();
}
void WorkTimer_Elapsed(object sender, ElapsedEventArgs e)
{
WorkTimer.Stop();
this.ProcessData(this.CurrentTime);
StartWorkTimer();
}
问题是计时器启动时-它在前三分钟不工作,在第二个三分钟后开始工作。例如:
计时器在2012年2月15日12:20:32.871启动,在2012年2月15日12:21:00.000它必须工作计时器已过,但其开始时间为2012年2月15日12:24:01.871如何解决此问题?
我确定当前时间(从previos问题):
这里的问题是,你需要四舍五入到最接近的第三分钟,但是为了让计时器工作,你必须使用最近的一分钟 因此,如果删除
AddSeconds(30)
,则计时器应按预期工作
另一方面:取整算法应该增加90秒(因为这是3分钟的一半),而不是30秒。如果将30秒添加到12:31:50,那么最终将是12:30:00,但应该是12:33:00。使用System.Threading.Timer类
DateTime dt = ... // here you assign the start time, so you can calculate
// the first time you want to start it.
var timer = new Timer(callback, null, dt, TimeSpan.FromMinutes(3));
回调是:
public delegate void TimerCallback(Object state)
在您的示例中,当PC上的时间被更正时,如何更正计时器间隔?您可以使用time changed event(时间更改事件)(当系统时间更改时触发)。但是,它只有在消息泵可用时才起作用(例如,它在windows服务中不起作用)。在这里阅读:为什么要加30秒?删除它应该会产生所需的结果。我添加30秒-请参阅我的previos问题
public delegate void TimerCallback(Object state)