Application_Start事件中用Timer做一个循环任务

时间:2023-03-10 04:36:03
Application_Start事件中用Timer做一个循环任务
protected void Application_Start(object sender, EventArgs e)
{
System.Timers.Timer timer = new System.Timers.Timer();
// 多长时间执行一次,毫秒为单位
timer.Interval = * ;//两分钟一次 *60 * 24; // 一天执行一次
timer.Elapsed += new System.Timers.ElapsedEventHandler(Global_ExecuteTask);
timer.AutoReset = true;
timer.Start();
}

定义一个类,实现IHttpModule接口。

IHttpModule向实现类提供模块初始化和处置事件。 
IHttpModule包含兩個方法:

public void Init(HttpApplication context);
public void Dispose();

Application_Start事件激发后,马上会进入HttpModule的Init方法,可以在这个Init方法中做一些初始化工作还有向一些事件追加额外处理事件方法。

HttpApplication类拥有的事件,和事件顺序

// 摘要:
// 当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。
public event EventHandler AcquireRequestState;
//
// 摘要:
// 当安全模块已建立用户标识时发生。
public event EventHandler AuthenticateRequest;
//
// 摘要:
// 当安全模块已验证用户授权时发生。
public event EventHandler AuthorizeRequest;
//
// 摘要:
// 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。
public event EventHandler BeginRequest;
//
// 摘要:
// 在释放应用程序时发生。
public event EventHandler Disposed;
//
// 摘要:
// 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。
public event EventHandler EndRequest;
//
// 摘要:
// 当引发未处理的异常时发生。
public event EventHandler Error;
//
// 摘要:
// 恰好在 ASP.NET 为当前请求执行任何记录之前发生。
public event EventHandler LogRequest;
//
// 摘要:
// 在选择了用来响应请求的处理程序时发生。
public event EventHandler MapRequestHandler;
//
// 摘要:
// 在已获得与当前请求关联的请求状态(例如会话状态)时发生。
public event EventHandler PostAcquireRequestState;
//
// 摘要:
// 当安全模块已建立用户标识时发生。
public event EventHandler PostAuthenticateRequest;
//
// 摘要:
// 在当前请求的用户已获授权时发生。
public event EventHandler PostAuthorizeRequest;
//
// 摘要:
// 在 ASP.NET 处理完 System.Web.HttpApplication.LogRequest 事件的所有事件处理程序后发生。
public event EventHandler PostLogRequest;
//
// 摘要:
// 在 ASP.NET 已将当前请求映射到相应的事件处理程序时发生。
public event EventHandler PostMapRequestHandler;
//
// 摘要:
// 在 ASP.NET 已完成所有请求事件处理程序的执行并且请求状态数据已存储时发生。
public event EventHandler PostReleaseRequestState;
//
// 摘要:
// 在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。
public event EventHandler PostRequestHandlerExecute;
//
// 摘要:
// 在 ASP.NET 跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生。
public event EventHandler PostResolveRequestCache;
//
// 摘要:
// 在 ASP.NET 完成缓存模块的更新并存储了用于从缓存中为后续请求提供服务的响应后,发生此事件。
public event EventHandler PostUpdateRequestCache;
//
// 摘要:
// 恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。
public event EventHandler PreRequestHandlerExecute;
//
// 摘要:
// 恰好在 ASP.NET 向客户端发送内容之前发生。
public event EventHandler PreSendRequestContent;
//
// 摘要:
// 恰好在 ASP.NET 向客户端发送 HTTP 标头之前发生。
public event EventHandler PreSendRequestHeaders;
//
// 摘要:
// 在 ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。
public event EventHandler ReleaseRequestState;
//
// 摘要:
// 在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序(例如某个页或 XML Web services)的执行。
public event EventHandler ResolveRequestCache;
//
// 摘要:
// 当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。
public event EventHandler UpdateRequestCache;

在Init方法中做很多初始化工作,同时可以给事件绑定自定义处理方法干些,自己想干的事情。如:

启用Gzip压缩、错误处理、登录验证、权限检查等。

/// <summary>
/// 初始化
/// </summary>
/// <param name="app"></param>
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(app_HttpGZip);
app.Error += new EventHandler(app_Error);
app.AuthenticateRequest += new EventHandler(app_AuthMethod);
app.AcquireRequestState += new EventHandler(app_Auth);
AppStartTime = DateTime.Now;
sys_Module_Cache.Init_sys_Module_Cache();
}