zoukankan      html  css  js  c++  java
  • 深入剖析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

    }
    }
  • 相关阅读:
    mysql获取给定时间段内的所有日期列表
    mysql中的年,月,日统计以及日历表的实现
    MySQL5.7安装配置
    获取ip地址
    Intellij热部署插件JRebel
    IntelliJ IDEA2018版热部署jrebel插件安装使用教程
    idea插件篇之java内存分析工具(JProfiler)
    mysql中的整除,取余
    SIMD.mul (SIMD) – JavaScript 中文开发手册
    Java面试题 : 如何确保N个线程访问N个资源的同时又不导致死锁
  • 原文地址:https://www.cnblogs.com/zhizouxiao/p/2052313.html
Copyright © 2011-2022 走看看