Atlas学习手记(5):使用服务端定时控件TimerControl

摘要:TimerControl是一个用于服务器端定时器的控件,可用来实时显示数据等,在很多地方都有应用,本文将简单介绍一下TimerControl的使用。

主要内容

1TimerControl介绍

2.完整示例

 

一.TimerControl介绍

TimerControl是一个用于服务器端定时器的控件,可用来实时显示数据等,在很多地方都有应用,本文将简单介绍一下TimerControl的使用。一个简单的TimerControl如下:

<atlas:TimerControl runat="server" Interval="3000" ID="tickerTimer" OnTick="tickerTimer_Tick" />

它的属性解释如下:

属性

解释

Interval

时间间隔,隔多长时间刷新一次,单位为ms

Interval="3000"

OnTick

每隔Interval时间后向服务器端触发事件,是一个服务器端的方法

OnTick="tickerTimer_Tick"

Enabled

设置TimerControl控件是否可用,通过此属性我们可以自行控制开启和停止定时。

二.完整示例

下面我们通过一个简单的示例来演示TimerControl的使用。在很多网站上我们都可以看到一些股票代码等信息,这些数据都是实时刷新的,这里我们模仿一个股票代码示例。

1.添加ScriptManager,这个不用多说,只要是Atlas应用都必须添加的。设置它的EnablePartialRendering属性为true,这里要用UpdatePanel来做局部刷新。

<atlas:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" />

2.添加TimerControl控件

<atlas:TimerControl runat="server" Interval="3000" ID="tickerTimer" OnTick="tickerTimer_Tick" />

代码很简单,指定间隔的时间为3s,触发的事件为tickerTimer_Tick

3.添加UpdatePanel,用两个Label来分别显示公司的名称和虚拟股票代码:

<atlas:UpdatePanel runat="server" ID="UpdatePanel1">

    
<Triggers>

        
<atlas:ControlEventTrigger ControlID="tickerTimer" EventName="Tick" />

    
</Triggers>

    
<ContentTemplate>

      
<h2>Atlas TimerControl Example</h2>

      
<asp:Label ID="CompanyName" runat="server" Font-Bold="True" Font-Size="Larger">Tokyo Traders:</asp:Label>

      
<asp:Label ID="CompanyValue" runat="server" Font-Bold="True" Font-Size="Larger" ForeColor="Red">20</asp:Label>

    
</ContentTemplate>

</atlas:UpdatePanel>

4.编写一个简单的Web Service,用来返回股票代码,这里我们用产生一个随机数来模拟:

using System;

using System.Web;

using System.Collections;

using System.Web.Services;

using System.Web.Services.Protocols;
 

/// <summary>

/// Summary description for TimerWebService

/// </summary>


[WebService(Namespace 
= "http://tempuri.org/")]

[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]

public class TimerWebService : System.Web.Services.WebService {

    
public TimerWebService () {

        
//Uncomment the following line if using designed components 

        
//InitializeComponent(); 

    }


    [WebMethod]

    
public string GetCode()

    
{
        Random r1 
= new Random();

        
return r1.Next(20,200).ToString();

    }

}

5.编写TimerControl的触发事件tickerTimer_Tick,代码很简单,只要把返回的数据显示在Label上就可以了。

protected void tickerTimer_Tick(object sender, EventArgs e)

{
    TimerWebService service 
= new TimerWebService();

    
this.CompanyValue.Text = service.GetCode();

}

至此一个简单的TimerControl示例就完成了,看一下运行效果,起始的时候:


3s
之后:

完整示例下载:http://terrylee.cnblogs.com/Files/Terrylee/TimerControlDemo.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2006-07-28 17:39 TerryLee 阅读(5398) 评论(41)  编辑 收藏 网摘 所属分类: [08]  Web开发[01]  .NET大本营

  回复  引用    
#1楼 2006-07-29 09:58 | 随风。NET [未注册用户]
不错 楼主连续发5贴了
跟你好好学 支持!!!

  回复  引用  查看    
#2楼 [楼主]2006-07-29 10:18 | TerryLee      
@随风。NET
呵呵,谢谢

我也是刚开始学,多多交流:-)
  回复  引用  查看    
#3楼 2006-07-29 12:46 | LeiZhilong      
跟楼主一起学:)
  回复  引用  查看    
#4楼 [楼主]2006-07-29 13:18 | TerryLee      
@LeiZhilong

欢迎常来哦:-)
  回复  引用    
#5楼 2006-07-29 23:59 | wqxh [未注册用户]
不错,又学到了,呵呵,继续加油.
  回复  引用    
#6楼 2006-07-30 00:05 | wqxh [未注册用户]
@TerryLee
在UpdatePanel中不加
<Triggers>
<atlas:ControlEventTrigger ControlID="tickerTimer" EventName="Tick" />
</Triggers>

TimerControl中的事件照样能够更新它.

  回复  引用  查看    
#7楼 [楼主]2006-07-30 10:27 | TerryLee      
@wqxh
不加Label可以局部更新吗?我没做实验 -_-
  回复  引用    
#8楼 2006-07-31 09:11 | sdf [未注册用户]
好象停止不事件刷新 Enable=false;
  回复  引用  查看    
#9楼 [楼主]2006-07-31 11:44 | TerryLee      
@sdf

我做的实验的时候Enable=false好像是可以的
  回复  引用  查看    
#10楼 2006-08-10 15:20 | 天若有情      
如果我想让它达到一定的条件时.停止时间的运行.有没有办法
  回复  引用  查看    
#11楼 [楼主]2006-08-10 17:30 | TerryLee      
@天若有情
可以使用它的Enabled属性
  回复  引用    
#12楼 2006-08-11 14:17 | 502375715 [未注册用户]
protected void tickerTimer_Tick(object sender, EventArgs e)
{
if (Label1.Text == "2")
{
// TimerControl1.Dispose();
TimerControl1.Enabled = false;
return;
}
else
{
Label1.Text = (int.Parse(Label1.Text) + 1).ToString();
}
}
在后台我这样写了.但是它还是每秒钟会执行这个函数..根本没用..
  回复  引用  查看    
#13楼 [楼主]2006-08-14 08:32 | TerryLee      
@502375715
你用鼠标单击事件测一下TimerControl1.Enabled = false,应该是可以的
  回复  引用  查看    
#14楼 2006-08-19 11:51 | spiderNet      
using System;

using System.Web;

using System.Collections;

using System.Web.Services;

using System.Web.Services.Protocols;
请问如何确定要添加哪些nameSpace的引用呢?
  回复  引用  查看    
#15楼 [楼主]2006-08-23 14:18 | TerryLee      
@spiderNet
-_-
用到哪方面的,就添加相关的引用
  回复  引用    
#16楼 2006-08-24 16:45 | chne [未注册用户]
@wqxh

发现在UpdatePanel加不加Triggers都一样,只要将ScriptManager里面的EnablePartialRendering属性设为True ,就可以局部刷新了

不知道Triggers到底有什么用
  回复  引用  查看    
#18楼 2006-08-29 20:02 | 飘云白客      
@TerryLee
good good
  回复  引用  查看    
#19楼 [楼主]2006-08-30 10:15 | TerryLee      
@飘云白客
呵呵,谢谢:-)
  回复  引用  查看    
#20楼 2006-09-06 10:10 | 西北望      
这个例子我run过了,没问题..可我要Page_Load中写例如Response.Write("asdfs");之类的就会报错,应该不会执行到page_load吧?能不能解释一下它的运行机理?

  回复  引用  查看    
#21楼 2006-09-06 11:10 | 西北望      
我设了个断点测试,得出结论,就是每次TimerControl到了时间间隔都会执行Page_Load事件方法,好恐怖..EnablePartialRendering是true了呀..而且浏览器中没有进度条的...我用纯javascript也写过类似的定时更新Ajax程序,可没有每次执行Page_Load事件方法.MS蒙我们?
  回复  引用  查看    
#22楼 [楼主]2006-09-06 17:07 | TerryLee      
@西北望
运行机理可以分析它的源码,是否每次执行Page_Load事件方法,我没仔细研究过:-)
  回复  引用  查看    
#23楼 2006-09-06 22:52 | 行与思      
感谢TerryLee
  回复  引用  查看    
#24楼 2006-09-07 00:04 | 行与思      
@TerryLee
我也希望能搞清楚它的运行机理,我试了一下,的确同西北望说的一样,每刷新,都要执行Page_Load
  回复  引用  查看    
#25楼 [楼主]2006-09-07 08:37 | TerryLee      
@行与思
每次都执行Page_Load听起来有些恐怖,呵呵:-)
  回复  引用    
#26楼 2006-09-07 09:14 | linx [未注册用户]
不会每次都执行Page_Load啊
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = this.CompanyValue.Text;
}
随便放一个Label1,显示不会改变就是原来的20
MS不会范这低级错误吧。
  回复  引用    
#27楼 2006-09-07 23:59 | 凌晨 [未注册用户]
有个问题,我运行楼主的例子,你一次等3s是更新了一次,在等3s就更新很快了`,然后就差不多每s都在刷新????
  回复  引用  查看    
#28楼 2006-09-08 00:53 | Dflying Chen      
@TerryLee
UpdatePanel的每一次局部更新对于服务器端ASPX页面来讲,都和传统的PostBack没有什么区别,唯一的区别就是在Render的时候只呈现UpdatePanel中的内容。
所以事实上,每一次局部更新时,ASP.NET都作了传统PostBack同样多的事情:Init,Load,Event Handling,Render......。这也是为什么UpdatePanel,特别是Timer触发更新的UpdatePanel需要慎用的原因。
希望这些解释有所帮助。
  回复  引用  查看    
#29楼 [楼主]2006-09-08 08:23 | TerryLee      
@Dflying Chen
谢谢Dflying Chen的解释,以前一直不明白,呵呵,看来以后用Atlas中的相关东西也得有选择的使用
  回复  引用    
#30楼 2006-09-08 22:02 | 凌晨 [未注册用户]
有个问题,我运行楼主的例子,你一次等3s是更新了一次,在等3s就更新很快了`,然后就差不多每s都在刷新????刷新的速度`不与设置的速度一样, 远远少于3s
  回复  引用    
#31楼 2006-09-12 10:24 | flowereyes[匿名] [未注册用户]
我试了一下,如果只是调用WebService的话,就只是在第一次load页面时调用Page_Load的~~~

  回复  引用    
#32楼 2006-09-24 15:39 | minghui227 [未注册用户]
@linx
是的,我也试了下,跟你一样的。不会每次都page_load
  回复  引用    
#33楼 2006-09-28 16:37 | luckydog [未注册用户]
为什么我加上了Triggers的时候创建控件的时候会出错呢?
  回复  引用    
#34楼 2006-10-20 09:22 | hujunhua [未注册用户]
用了TimerControl每两秒局部刷新一次 网页进度条的确没有了 但是屏幕每隔两秒闪一次 靠!

极度郁闷 大家可以试试

a.aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" />
<div>
<div style="width: 520px; height: 436px"><iframe src="http://www.baidu.com" width="100%" height="100%"></iframe>
</div>

</div>
<atlas:TimerControl ID="TimerControl1" runat="server" Interval="3000" OnTick="TimerControl1_Tick" EnableViewState="False" />
<atlas:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server" Height="134px" Width="147px"></asp:ListBox>
</ContentTemplate><Triggers><atlas:ControlEventTrigger ControlID="TimerControl1"
EventName="Tick" /></Triggers></atlas:UpdatePanel>
</form>
</body>
</html>


a.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
TimerControl1.Interval = 2000;
}
protected void TimerControl1_Tick(object sender, EventArgs e)
{
ListItem li = new ListItem(DateTime.Now.ToString());
ListBox1.Items.Add(li);
}

  回复  引用    
#35楼 2006-10-20 09:22 | hujunhua [未注册用户]
用了TimerControl每两秒局部刷新一次 网页进度条的确没有了 但是屏幕每隔两秒闪一次 靠!

极度郁闷 大家可以试试

a.aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<atlas:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True" />
<div>
<div style="width: 520px; height: 436px"><iframe src="http://www.baidu.com" width="100%" height="100%"></iframe>
</div>

</div>
<atlas:TimerControl ID="TimerControl1" runat="server" Interval="3000" OnTick="TimerControl1_Tick" EnableViewState="False" />
<atlas:UpdatePanel ID="UpdatePanel1" runat="server"><ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server" Height="134px" Width="147px"></asp:ListBox>
</ContentTemplate><Triggers><atlas:ControlEventTrigger ControlID="TimerControl1"
EventName="Tick" /></Triggers></atlas:UpdatePanel>
</form>
</body>
</html>


a.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
TimerControl1.Interval = 2000;
}
protected void TimerControl1_Tick(object sender, EventArgs e)
{
ListItem li = new ListItem(DateTime.Now.ToString());
ListBox1.Items.Add(li);
}

  回复  引用    
#36楼 2007-01-03 00:18 | JJY [未注册用户]
别只讲机理啊,用TIMERCONTROL的时候,整个屏都在闪,怎么解决啊?
  回复  引用    
#37楼 2007-01-17 00:40 | snyod [未注册用户]
代表党(.NET平台)感谢您.
全部收藏.....................

中国最好的.NET平台学习网.
  回复  引用    
#38楼 2007-01-20 00:29 | york [未注册用户]
为什么设置了timercontrol 的Enabled=false,还是不能停止定时器?
  回复  引用    
#39楼 2007-02-27 13:53 | 犹豫王子 [未注册用户]
我刚刚做了实验
每次都page_Load的,大家可以试试
可能是我的方法除了问题
呵呵
但的确如此
  回复  引用    
#40楼 2007-02-27 13:55 | 犹豫王子 [未注册用户]
<a href="#">fasd</a>




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-28 17:44 编辑过
Google站内搜索

相关文章:

相关链接: