我使用下面的代码每24小时调用一次网页。据我所知,Timer.Elapsed事件应该在24小时内触发一次。不幸的是,有时timer.Elapsed会从不同的线程连续触发几次。有人能解释一下为什么会发生这种情况吗?
void Application_Start(object sender, EventArgs e)
{
var timer = new System.Timers.Timer { Interval = 1 };
timer.Elapsed += delegate
{
SiAuto.Main.LogMessage("Scheduler Timer");
timer.Interval = TimeSpan.FromHours(24).TotalMilliseconds;
var webClient = new WebClient();
webClient.DownloadDataAsync(new Uri(WebHelper.GetBaseUrl + "/scheduled-task"));
};
timer.Start();
}发布于 2011-09-20 21:22:13
如果是公共计算机,可能与重启IIS有关。我知道计时器在Application_Start事件中不能很好地工作。
如果你有能力,我想你最好创建一个窗口服务,或者放一些变量,LastRun,DateTime,并检查它今天是否已经运行了对不起
发布于 2011-09-20 21:23:39
计时器基本上会根据你给出的时间间隔触发,你的代码解释说你给出的时间间隔是'1‘,这个时间间隔将以毫秒为单位(1秒= 1000毫秒)。将间隔增加到更多,当线程在一个函数的中间时,定时器也会被调用,而不会停止,所以当主线程进入函数内部时,
timer1.Enabled = false;在完成所有功能之后,再次启用计时器控件。因此,它不会影响其他功能。
https://stackoverflow.com/questions/7485746
复制相似问题