深入剖析Asp.net组件设计(1):WebTimer

 
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.ComponentModel;

namespace WebTimer
{
public class WebTimer:Control,IPostBackEventHandler
{
#region 成员
private Int32 _interval = 5000 ;

private Boolean _enabled = false ;
private static readonly object EventTimer = new object ();
#endregion
#region 属性
[DefaultValue(
5000 ),Bindable( false ),Description( " 延迟毫秒数 " )]
public Int32 Interval
{
get { return _interval; }
set { _interval = value; }
}

public Boolean Enable
{
get { return _enabled; }
set { _enabled = value; }
}

#endregion
/// <summary>
/// 定义事件
/// </summary>
#region 事件
public event EventHandler Timer
{
add {
// 将委托添加到控件的委托列表中,value是一个委托,此方法包含
// this.Timer+=EventHandler(Id_Timer);
Events.AddHandler(EventTimer, value);
}
remove {
Events.RemoveHandler(EventTimer, value);
}
}
/// <summary>
/// 在执行时postback时调用
/// </summary>
/// <param name="e"></param>
protected virtual void OnTimer(EventArgs e)
{

EventHandler timerHandler
= (EventHandler)Events[EventTimer];
if (timerHandler != null )
{
// 执行所有向Timer事件注册的方法:ID_Timer(sender,e)
timerHandler( this , e);
}

}
#endregion

/// <summary>
/// 实现接口:在PostBack事件中调用OnTimer函数
/// </summary>
/// <param name="eventArgument"></param>
#region 接口
public void RaisePostBackEvent( string eventArgument)
{
// 事件发生调用OnTimer函数
OnTimer(EventArgs.Empty);
}
#endregion

#region 核心Js:setTimeOut函数
private string buildJs()
{
StringBuilder str
= new StringBuilder();
str.Append(
" <script language='JavaScript'>\n<!-- " );
str.AppendFormat(
" \n setTimeout(\"{0}\",{1}); " ,
new object [] { this .Page.GetPostBackEventReference( this ), _interval.ToString() });
str.Append(
" \n//-->\n</script> " );
return str.ToString();

}
#endregion

#region 重载OnPreRender、Render
protected override void OnPreRender(EventArgs e)
{
base .OnPreRender(e);
Page.GetPostBackEventReference(
this , "" );
}
protected override void Render(HtmlTextWriter writer)
{
base .Render(writer);
if (Page != null )
{
Page.VerifyRenderingInServerForm(
this );
}
if (_enabled)
{
writer.Write(buildJs());
}
}
#endregion

}
}

转载于:https://www.cnblogs.com/zhizouxiao/archive/2011/05/21/2052313.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值