WebForm实现实时信息提醒功能(Timers与Ajax实现及优劣浅析)【转】

本文主要讲述通过C#定时器Timers类及通过引用第三方类Aajx来实现‘OA’等系统中比较常用的信息提醒功能,并小做分析!

一,运用Timers定时器触发事件

此方法主要是指在触发事件里查询数据库,当需要的时候,调用Js,实现信息提醒的功能。
方法一:前台页面插入一个Timers控件
  1. <asp:ScriptManager runat="server"></asp:ScriptManager>  
  2.     <asp:UpdatePanel runat="server">  
  3.         <ContentTemplate>  
  4.             <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Enabled="true" Interval="500000">  
  5.             </asp:Timer>  
  6.         </ContentTemplate>  
  7.     </asp:UpdatePanel>  
后台代码如下
  1. protected void Timer1_Tick(object sender, EventArgs e)  
  2.     {  
  3.         try  
  4.         {  
  5.             int i = MesBll.GetMesCount();//获取数据库需要提示数据的个数  
  6.             if (i != 0)  
  7.             {  
  8.                 //相关需要引用的函数  
  9.             }  
  10.         }  
  11.         catch (Exception)  
  12.         {  
  13.             throw;  
  14.         }  
  15.     }  
方法二:直接后台调用Timers类
  1. private void InitializeComponent()  
  2.   {  
  3.       System.Timers.Timer aTimer = new System.Timers.Timer();  
  4.       aTimer.Elapsed += new ElapsedEventHandler(GetMessageCount);//到达时间的时候执行事件GetMessageCount;  
  5.       aTimer.Interval = 500000;//设置引发时间的时间间隔 此处设置为100秒(1000*100毫秒)  
  6.       aTimer.AutoReset = true;//设置是执行一次(false)还是一直执行(true);  
  7.       aTimer.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;  
  8.   }  
  9.   private void GetMessageCount(object sender, EventArgs e)  
  10.   {  
  11.       try  
  12.       {  
  13.           int i = MesBll.GetMesCount();//获取数据库需要提示数据的个数  
  14.           if (i != 0)  
  15.           {  
  16.               //相关需要引用的函数  
  17.           }  
  18.       }  
  19.       catch (Exception)  
  20.       {  
  21.           throw;  
  22.       }  
  23.   }  

二,引用Ajax实现信息提醒功能

首先是前期配置。
在bin文件夹下引用下载好的AjaxPro.2.dll文件,然后是在web.config文件下加入下面这段配置代码。
  1. <system.web>  
  2.     <!--调用ajax,留言信息提醒用-->  
  3.     <httpHandlers>  
  4.       <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>  
  5.     </httpHandlers>  
  6.   </system.web>  
OK,完美完成,其实运用很简单,首先是在后台调用Ajax并写好相应的响应事件:
  1. Bll.CusLeaMassegeBll MesBll = new Bll.CusLeaMassegeBll();  
  2.  protected void Page_Load(object sender, EventArgs e)  
  3.  {   
  4.      #region 注册无刷新  
  5.     AjaxPro.Utility.RegisterTypeForAjax(typeof(Text));//Text为我当前页面的类名  
  6.     #endregion   
  7.      if (!IsPostBack)  
  8.      {  
  9.      }  
  10.  }  
  11.  /// <summary>  
  12.  /// 查看用户当前的数据表  
  13.  /// </summary>  
  14.  /// <returns></returns>  
  15.  [AjaxPro.AjaxMethod]  
  16.  public string getxx()  
  17.  {  
  18.      int news = MesBll.GetMesCount();//从数据表里得到需要提醒的数值  
  19.      return news.ToString();  
  20.  }  
然后,现在只要在前台调用这段js就可以了。
  1.  <script language="javascript" type="text/javascript">  
  2.         setInterval("getque()", 50000); //从数据库中读取数据是间隔时间,每1000值为1分钟  
  3.         function getque() {  
  4.             var getobject = Text.getxx(callback);} //取当前用户的新信息,返回新信息的数量,Text为后台类名  
  5.         function callback(res) //回调函数  
  6.         {  
  7.             var idocument.getElementById("disMes");  
  8.             if (res.value > 0){//如果新信息的数量大于0则给用户弹窗口提示,这里只是测试,您可以用其它方法来实现提示  
  9.                 i.style.display = "block";  
  10.                 alert('您收到' +res.value + '条新信息,点击确定查看');  
  11.                 // varurl="Default.aspx";  
  12.                 // window.open(url,'600','400',1); //点击确定后进入当前用户的收件箱页面。  
  13.             }  
  14.         }  
  15. </script>   
原文地址:https://www.cnblogs.com/yigerendehaibian/p/3513316.html