带有计时器的ASP.NET多线程问题

带有计时器的ASP.NET多线程问题,asp.net,multithreading,timer,Asp.net,Multithreading,Timer,我使用下面的代码每24小时调用一次网页。据我所知,计时器。已用事件应在24小时内触发一次。不幸的是,有时timer.eassed会从不同的线程连续触发几次。有人能解释为什么会发生这种情况吗 void Application_Start(object sender, EventArgs e) { var timer = new System.Timers.Timer { Interval = 1 }; timer.Elapsed += delegate

我使用下面的代码每24小时调用一次网页。据我所知,计时器。已用事件应在24小时内触发一次。不幸的是,有时timer.eassed会从不同的线程连续触发几次。有人能解释为什么会发生这种情况吗

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();


}

如果是公用计算机,可能与重新启动IIS有关。 我知道计时器在应用程序启动事件中不能正常工作

如果你有可能,我认为你最好创建一个窗口服务或 放置一些变量LastRun DateTime并检查它是否已在今天运行
对不起,我的英语

计时器基本上会根据您给定的时间间隔触发,您的代码说明您给定的时间间隔为“1”,以毫秒为单位1秒=1000毫秒。将间隔再增加一点,并且当线程处于一个函数的中间时,计时器也将被调用而不停止,因此当主线程进入函数内部时,使计时器类似

timer1.Enabled = false;

在完成所有功能后,再次启用计时器控制。因此,它不会影响其他功能。

是不是我必须将开始间隔从间隔=1更改为间隔=1000之类的更大值?您确定您的站点可以保持24小时或更长时间?IIS关闭没有流量的站点。这是否发生在web应用程序内部?使用web应用程序进行任务调度通常不是一个好主意。windows服务或定时控制台应用程序或类似的东西会更可靠。web应用程序在何时启动、运行多长时间等方面取决于web服务器。@HansKesting是的,它在几分钟内收到几次点击。@David我不想为计划操作创建单独的应用程序。我相信我会在ASP.NET中找到有效的解决方案:即使是我上面的解决方案也很有效,只是有时Timer.appeased事件会多次出现。