我使用下面的代码每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();
}
答案 0 :(得分:0)
如果它是公共计算机,可能与重启IIS有关。 我知道计时器在Application_Start事件中不能正常工作。
如果你有实在意,我认为你最好创建一个窗口服务或 放一些变量LastRun DateTime并检查它是否已经运行 对不起我的英文
答案 1 :(得分:0)
定时器基本上会根据你给出的间隔触发,你的代码解释你给出的间隔为'1',将以毫秒为单位(1秒= 1000毫秒)。将间隔增加到更多,并且当一个线程处于一个函数的中间时,也会在没有任何停止的情况下调用定时器,所以当主线程进入函数内部时,使定时器如,
timer1.Enabled = false;
再次执行所有功能后启用定时器控件。所以,它不会影响其他功能。