3 回答

TA贡献1846条经验 获得超7个赞
使用计时器解决它的一种简单方法是将间隔设置为一秒,并在计时器的回调方法中检查值是否DateTime.Now.Seconds除以 30:
void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
if(DateTime.Now.Seconds % 30 == 0)
{
CalculateItems();
}
}

TA贡献1799条经验 获得超6个赞
您最初可以以 1 秒的间隔启动计时器。然后在 Timer Event 中,如果 DateTime.Now.Second 为 30 或 0,则可以将间隔设置为 30 秒。从那时起,您的事件将仅在指定时间触发。
System.Timers.Timer timer= new System.Timers.Timer(1000);
private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
if(timer.Interval!=30000 && DateTime.Now.Seconds % 30 == 0)
{
timer.Stop();
timer.Interval = 30000;
timer.Start();
DoWork();
}
else
{
if(timer.Interval==30000)
{
DoWork();
}
}
}

TA贡献1820条经验 获得超10个赞
我用计时器解决了这个问题,并计算了下一个 30 秒块的时间:它在过去后再次重新计算 30 秒,否则每次运行后它会稍微得到一个增量。
class Program
{
static System.Threading.Timer _ttimer;
static void Main(string[] args)
{
SetupTimerTo30sec();
Console.ReadLine();
}
private static void SetupTimerTo30sec()
{
var now = DateTime.Now;
int diffMilliseconds;
if (now.Second < 30)
{
diffMilliseconds = (30 - now.Second) * 1000;
}
else
{
diffMilliseconds = (60 - now.Second) * 1000;
}
diffMilliseconds -= now.Millisecond;
if (_ttimer != null)
{
_ttimer.Change(diffMilliseconds, 30 * 1000);
}
else
{
_ttimer = new Timer(OnElapsed, null, diffMilliseconds, 30 * 1000);
}
}
private static void OnElapsed(object state)
{
Console.Write(DateTime.Now.ToLongTimeString());
Console.WriteLine($":{DateTime.Now.Millisecond}");
SetupTimerTo30sec();
}
}
- 3 回答
- 0 关注
- 221 浏览
添加回答
举报