在 ASP.NET 中使用计时器(Timer)

asp.net

我在实验中发现在 ASP.NET 中可以使用计时器(Timer)完成一些定时动作。这一点可能会对我们的一些 Web 程序有益。

下面首先介绍我测试使用的一个例子:

首先在 global.asax 中的 Application_OnStart 事件过程中定义计时器,代码如下:
[VB.NET] global.asax
<%@ import Namespace="System.Timers" %>
<script runat="server">

   Sub Application_OnStart(sender As Object, e As EventArgs)
       ' 创建一个计时器,单位:毫秒
       Dim aTimer As New System.Timers.Timer(10000)

       ' 将 Fresher 指定为计时器的 Elapsed 事件处理程序
       AddHandler aTimer.Elapsed, AddressOf Fresher

       ' AutoReset 属性为 true 时,每隔指定时间循环一次;
       ' 如果为 false,则只执行一次。
       aTimer.AutoReset = True
       aTimer.Enabled = True
        
       ' 先给 Application("TimeStamp") 指定一个初值
       Application.Lock()
       Application("TimeStamp") = DateTime.Now.ToString()
       Application.UnLock()
   End Sub

   Sub Fresher(sender As Object, e As ElapsedEventArgs)
       Application.Lock()
       Application("TimeStamp") = DateTime.Now.ToString()
       Application.UnLock()
   End Sub

</script>
 

然后我们简单写一个 test.aspx 来查看 Application("TimeStamp") 的值。代码如下:
[VB.NET] test.aspx
<%
    Response.Write(Application("TimeStamp"))
%>
 

分析:

根据 global.asax 中的代码,我们设定了一个计时器,每隔 10 秒钟执行一次 Fresher() 过程;在 Fresher() 过程中我们事实上只是重新写入了一个 Application("TimeStamp") 新值。换句话说,Application("TimeStamp") 的值是应该每隔 10 秒钟更新一次的。

是不是这样的呢?通过 test.aspx 的反复刷新观察 Application("TimeStamp") 的值,的确发现这个值在每隔 10 秒地变化一次,而其他时候则保持不变。与我们的预期是一致的。

意义:

通过引入计时器我们可以在 ASP.NET 的全局性程序(Application)中灵活的使用计时器完成一些定时操作,比如:在社区/论坛系统中,每隔 5 分钟更新一次在线用户列表,每隔 1 个小时更新一次用户经验值,或者每隔一天备份一次关键数据等等。这个思路应该是很诱人的。

探讨:

Q: 是否在 ASP.NET 代码的任何地方都可以使用计时器呢?
A: 我没有测试过在普通 *.aspx 中插入计时器的情形。但从 B/S 程序的特点来看,即使在 *.aspx 中插入计时器可行,也不是一种好的选择。因为对于 B/S 程序来说,服务器接到客户端的请求本身就是一个事件,在这个事件处理过程中,服务器必须迅速的作出回应,为客户端产生相应的 HTML 代码,然后结束这一过程。如果在 *.aspx 使用计时器(如果允许的话),则第一没有太大必要,第二很容易使系统因为插入的计时器过多(因为每一次 *.aspx 的执行都有可能插入一个新的计时器)而使系统瘫痪。

因此,我建议只在 global.asax 的 Application_OnStart 中使用比较安全一些。欢迎对此感兴趣的朋友对此发表见解。

 

时间: 2024-02-22 01:09:21

在 ASP.NET 中使用计时器(Timer)的相关文章

在ASP.NET中使用计时器(Timer)

我在实验中发现在 ASP.NET 中可以使用计时器(Timer)完成一些定时动作.这一点可能会对我们的一些 Web 程序有益. 下面首先介绍我测试使用的一个例子: 首先在 global.asax 中的 Application_OnStart 事件过程中定义计时器,代码如下: [VB.NET] global.asax <%@ import Namespace="System.Timers" %> <script runat="server">

asp.net中System.Timers.Timer的使用方法_javascript技巧

我们经常会在网站中加一些定时执行的任务,比如生成静态页.执行邮件发送等. 可以通过在Global.asax中这样设置来实现.   复制代码 代码如下: void Application_Start(object sender, EventArgs e)     {                // 在应用程序启动时运行的代码        System.Timers.Timer MT = new System.Timers.Timer();      MT.Enabled = true;   

在 ASP.NET2.0 中使用计时器(Timer)

我在实验中发现在 ASP.NET 中可以使用计时器(Timer)完成一些定时动作.这一点可能会对我们的一些 Web 程序有益. 注:  原文里只有VB.NET的代码,  为了方便大家,  我写了C#版的代码: 下面首先介绍我测试使用的一个例子: 首先在 global.asax 中的 Application_OnStart 事件过程中定义计时器,代码如下: VB.NET <%@ import Namespace="System.Timers" %> <script ru

asp.net中Timer无刷新定时器的实现方法_实用技巧

 本文实例讲述了asp.net中Timer无刷新定时器的实现方法.Timer控件要实现无刷新,得用到ajax技术,这里使用VS2008自带的ajax技术.    首先得添加一个ScriptManager控件,然后再添加一个UpdatePanel用于存放Timer控件内容的,就可以实现无刷新了.下面是详细的内容: 一.前台代码如下: <form id="form1" runat="server"> <asp:ScriptManager ID=&quo

利用Timer在ASP.NET中实现计划任务的方法_实用技巧

.NET Framework中为我们提供了3种类型的Timer,分别是: Server Timer(System.Timers.Timer),Thread Timer(System.Threading.Timer )和Windows Timer(System.Windows.Forms.Timer). 其中Windows Timer和WinAPI中的Timer一样,是基于消息的,而且是单线程的.另外两个Timer则不同于Windows Timer,它们是基于ThreadPool的,这样最大的好处

如何定期执行asp.net中的一个页面?如何定期执行asp.net中的一个页面?

问题描述 是这样的我有一个windows服务会每隔一段时间更新一下数据库中某个表的列的时间我在页面来核查这个时间是否超过了一定的时间范围来判断这个windows服务是否在正常运行.并把核查出来的结果显示到页面上.这样我就需要隔段时间来执行这个页面,返回给用户正确的结果.请问如何定期来执行这个页面呢?PS一下需求是客户定的,请不要怀疑一些需求性的东西,我想知道的就是如何定期来执行一个页面,谢谢! 解决方案 解决方案二:外部调用vbs定时执行aspx页面解决方案三:请楼上的能详细点吗?谢谢啊.解决方

C#中各种计时器 Stopwatch、TimeSpan

1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间. Stopwatch 实例或者在运行,或者已停止:使用 IsRunning 可以确定 Stopwatch 的当前状态.使用 Start 可以开始测量运行时间:使用 Stop 可以

ASP.net中网站访问量统计方法代码_实用技巧

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间(IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计,代

asp.net中怎么实现扫描二维码可以查看另外一个表单中的详细信息

问题描述 asp.net中怎么实现扫描二维码可以查看另外一个表单中的详细信息 就是在二维码生成的时候如果把另外一个表单中的内容给穿进去,就好像跳转页面似得,只不过变成扫描才能查看信息 解决方案 你的扫描是用户手机扫描还是什么?用户手机扫描你要自己弄个app给用户用,附带二维码扫描功能,二维码存储一个guid,app扫描得到二维码后回发服务器存储,客户端这个二维码页面用计时器和ajax不断轮训服务器获取对应的guid,存在了就控制页面跳转到信息页面或者ajax返回相关信息显示出来