首先不要设置iis自动回收,一般设置凌晨1-2点左右回收一次,当凌晨iis回收应用程序池的时候,会调用Application_End,执行里面的代码,
重新启动网站,建议定时器的代码放在Session_Start里面,因为
Application_Start只有再第一个用户访问网站的时候才会触发该方法,通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,
历史访问人数统计的初始化等等均可在这里定义.所以第一次访问的时候会先进入Application_Start,
然后再进入Session_Start。但是以后每次访问的时候进入的是Session_Start
第一个访问网站的用户会触发该方法.
Application_Start()
{
}
//每个用户访问网站的第一个页面时触发;
void Session_Start(object sender, EventArgs e)
{
LogHelper.WriteInfoLog("触发Session_Start事件,准备执行定时任务:" + DateTime.Now);
#region 定时任务
System.Threading.Thread myTimer = new System.Threading.Thread(new System.Threading.ThreadStart(Timer_Write));
myTimer.Start();
#endregion
}
//网站关闭,或重启时,会触发该方法.
void Application_End(object sender, EventArgs e)
{
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
System.Threading.Thread.Sleep(1000);
//触发事件, 写入提示信息
LogHelper.WriteInfo
C# 因IIS回收导致定时器失效的解决方案
最新推荐文章于 2024-07-23 16:55:11 发布