【发布时间】:2011-02-19 23:12:55
【问题描述】:
我正在开发一个应用程序,我需要从服务器获取当前日期(它与机器的日期不同)。 我从服务器接收日期并通过简单的拆分创建一个新的 DateTime:
globalVars.fec = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(infoHour[0]), int.Parse(infoHour[1]), int.Parse(infoHour[2]));
globalVars 是一个类,而 fec 是一个公共静态变量,因此我可以在应用程序的任何地方访问它(我知道编码不好......)。 现在我需要一个计时器来检查该日期是否等于我存储在列表中的某些日期,如果相等,我只需调用一个函数。
List<DateTime> fechas = new List<DateTime>();
在从服务器获取日期之前,我使用的是计算机的日期,因此要检查日期是否匹配,我使用的是:
private void timerDatesMatch_Tick(object sender, EventArgs e)
{
DateTime tick = DateTime.Now;
foreach (DateTime dt in fechas)
{
if (dt == tick)
{
//blahblah
}
}
}
现在我有来自服务器的日期,所以 DateTime.Now 不能在这里使用。相反,我创建了一个 Interval=1000 的新计时器,并且在滴答声中我将 1 秒添加到 globalVars.fec 使用:
globalVars.fec = globalVars.fec.AddSeconds(1);
但是时钟不准确,每 30 分钟时钟会丢失大约 30 秒。
还有其他方法可以做我想做的事情吗?我曾考虑过使用 threading.timer,但我需要访问其他线程和非静态函数。
【问题讨论】:
-
我实际上已经启动了时间服务器,我只需要应用程序使用来自服务器而不是计算机的时间
-
C# 没有计时器。 .NET 框架可以。