当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  ASP.NET 2.0的异步页面刷新(1)

 ASP.NET 2.0的异步页面刷新(1)

点击次数:29 次 发布日期:2008-11-26 12:37:06 作者:源代码网
源代码网推荐      ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了。
源代码网推荐  
源代码网推荐  我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作;其次为了拿到socket服务返回的长度不定、有可能很大的Response数据,我不得不采用了dotNET的IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags, AsyncCallback callback, object state);办法来异步提交socket命令,然后在回调函数中迭代调用int EndReceive(IAsyncResult asyncResult);来获取Response数据直到数据被取完,这一系列的数据片断都缓存在一个MemoryBlock链表中。
源代码网推荐  
源代码网推荐  这种情况下,ASP.NET页面要想用表格展示Response数据,必须能够被异步刷新。
源代码网推荐  
源代码网推荐  ASP.NET 1.x 本质上不支持异步页,但是通过坚韧的努力和不懈地创新可以生成异步页。有关更多概述信息,请参阅 MSDN®Magazine 2003 年 6 月刊的文章“Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code”,该文章的作者是 Fritz Onion。
源代码网推荐  
源代码网推荐  但ASP.NET 2.0 极大地简化了生成异步页的方式。首先使用该页的 @ Page 指令引入 Async=“true” 属性。
源代码网推荐  
源代码网推荐  其次,在 Page_Load 时,注册事件Page_PreRender:
源代码网推荐  
源代码网推荐   private void Page_Load(object sender, System.EventArgs e)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   if (!IsPostBack)
源代码网推荐  
源代码网推荐   {
源代码网推荐  
源代码网推荐   // 注册事件Page_PreRender执行完成时执行方法
源代码网推荐  
源代码网推荐   // Hook PreRenderComplete event for data binding
源代码网推荐  
源代码网推荐   this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  接下来,我在点击按钮的事件函数中,开始我的异步操作之旅:
源代码网推荐  
源代码网推荐  /// PageAsyncTask 的方式则是增强版本,除了异步页面处理开始和结束方法自身外,
源代码网推荐  
源代码网推荐  /// 还可以提供在超时情况下的处理方法,以及处理时的状态对象。
源代码网推荐  
源代码网推荐  ///
源代码网推荐  
源代码网推荐  PageAsyncTask task = new PageAsyncTask(
源代码网推荐  
源代码网推荐   new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),
源代码网推荐  
源代码网推荐   new EndEventHandler(EndSubmitKeywordsAsyncOperation),
源代码网推荐  
源代码网推荐   new EndEventHandler(TimeoutSubmitKeywordsAsyncOperation),
源代码网推荐  
源代码网推荐   null
源代码网推荐  
源代码网推荐  );
源代码网推荐  
源代码网推荐  RegisterAsyncTask(task);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  /// 对大多数简单的异步处理情况,可以直接调用AddOnPreRenderCompleteAsync 方法,
源代码网推荐  
源代码网推荐  /// 提交页面请求开始和结束时的处理代码
源代码网推荐  
源代码网推荐  //AddOnPreRenderCompleteAsync(
源代码网推荐  
源代码网推荐  // new BeginEventHandler(BeginSubmitKeywordsAsyncOperation),
源代码网推荐  
源代码网推荐  // new EndEventHandler(EndSubmitKeywordsAsyncOperation)
源代码网推荐  
源代码网推荐  //);
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐  该页经历其常规处理生命周期,直到 PreRender 事件刚刚引发之后。然后,ASP.NET 调用使用 RegisterAsyncTask注册的 Begin 方法BeginSubmitKeywordsAsyncOperation。这个方法中我将向sokcet服务提交我的命令,然后将socket.BeginReceive方法得到的IasyncResult对象返回给ASP.NET。
源代码网推荐  
源代码网推荐   然后,我的socket异步回调函数在最终全部获得数据流后,通过调用
源代码网推荐  
源代码网推荐  
源代码网推荐  
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华