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

Application_Start事件中用Timer做一个循环任务的更多相关文章

  1. java中用swing做一个windows计算器

    目录 主函数 普通计数器 科学计算器 注意: @(java中用swing做一个windows计算器) 前言: 来看这篇教程估计都是java课程设计吧,现在已经没有公司很少使用swing组件了,java ...

  2. 假设做一个循环滚动UIScrollView

    先上效果图: 首先初始化: - (void)viewDidLoad { //加入最后一张图 用于循环 int length = 4; NSMutableArray *tempArray = [NSMu ...

  3. 如何做一个导航栏————浮动跟伪类(hover)事件的应用

    我们先说一下伪类选择器的写法: 写法:选择器名称:伪类状态{}4 常见伪类状态: 未访问:link 鼠标移上去:hover 激活选定:active 已访问:visited 获得焦点的时候触发:focu ...

  4. Labview一个循环中放两个事件结构会导致前面板锁定的问题

    建议在同一个循环中,只放置一个事件结构.此时,当一个事件发生时,事件结构将对事件进行处理,然后继续循环,事件结构再等待下一个事件发生. 如在同一个循环中放置两个事件结构,只有在两个事件结构都处理了事件 ...

  5. VUE2.0+VUE-Router做一个图片上传预览的组件

    之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的 ...

  6. [DataTable]控件排序事件中用DataView及DataTable排序

    控件排序事件中用DataView及DataTable排序 文章分类:.net编程 在做ASP.NET页面开发时,经常要用到dataset(或者DataTable),绑定到DataGrid或GridVi ...

  7. 关于longPressGesture做一个长按连加的效果(原创)

    关于longPressGesture做一个长按连加的效果 解释一下什么意思呢?就是一个button长按之后其数字的一直累加.朋友们可能看起来很简单,无非就是加一个长按手势(longPressGestu ...

  8. 关于Application_End 与 Application_Start事件触发情况的测试(待续)

    测试项目搭建 定义一个简单的Mvc项目,有如下文件: (1) public class Startup { public void Configuration(IAppBuilder app) { a ...

  9. [转]jsPlumb插件做一个模仿viso的可拖拉流程图

    原贴:https://www.cnblogs.com/sggx/p/3836432.html 前言 这是我第一次写博客,心情还是有点小小的激动!这次主要分享的是用jsPlumb,做一个可以给用户自定义 ...

随机推荐

  1. 你不得不掌握的thinkphp5

    thinkphp官网在去年的时候发布了tp的颠覆版本thinkphp5,tp5确实比之前的版本好用了很多,增加了很多的一些特性,它采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖, ...

  2. javaweb基础(40)_jdbc框架

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  3. javaweb基础(38)_事务

    一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句  update from account set mone ...

  4. CSS 负边距读后感

    最近看到一篇讲解CSS 负边距的文章: http://segmentfault.com/a/1190000003750411?utm_source=Weibo&utm_medium=share ...

  5. CentOS 7与 Windows双系统丢失Windows启动项及默认启动项修改

    1.Windows启动项消失的原因:   在安装Win7.8/10系统+CentOS7双系统后,默认会将mbr(Main Boot Record)改写为grub2,默认的CentOS7无法识别Wind ...

  6. django批量form表单处理

    1.应用说明 一般在表单信息录入中,如果存在许多重复提交的信息,我们就需要进行批量处理,比如学生信息的批量录入. 这里一种方式就是使用xlrd模块处理,把学生信息录入到系统内 另外一种方式就是采用我们 ...

  7. 记录表TABLE的使用详解

    定义记录表(或索引表)数据类型与记录类型相似,但它是对记录类型的扩展.它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表. 定义记录表类型的语法如下: 1 2 TYP ...

  8. JS - 属性描述符各配置的默认值的注意事项

    通过字面量或者obj.x = 1;创建的属性 与 通过Object.defineProperty创建的属性,他们的属性描述符的默认值是不同的,前者都为true,后者都为false.

  9. 使用cookie登陆知乎

    只是想说明一个问题,Cookie可以维持登录状态,有些网页当中,访问之后的cookie里面带有登陆账号,和登陆密码,这样可以使用cookie直接访问网页,如知乎,首先登录知乎,将Headers中的Co ...

  10. java-访问控制修饰符

    访问权限 public    任何情况都可以访问 默认包 本包范围内可以访问到 protect       同一个包里的所有类所可以访问:所有子类(子类可以不和父类在同一个包)都可以访问 privat ...