All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
让我们来编写一些PHP实用的脚本_php资料_编程技术
通过PHP和Sajax使用Ajax之JavaScript_[PHP教程]
PHP应用技巧小总结:几个有用的小技巧_[PHP教程]
.NET框架类库中的定时器类的使用_.net资料_编程技术
asp.net常用正则表达式大全_[Asp.Net教程]
GridView实用示例源码(可以导出Excel)_[Asp.Net教程]
SQL,SERVER如何减少死锁_mssql学习_编程技术
PHP,开发中的中文编码问题_php资料_编程技术
PHP开发实例:创建PDF中文文档的程序代码_php资料_编程技术
动态网页实用技巧:php中文乱码问题_php资料_编程技术
Reading number is top 10 pictures
Chinese paper-cut grilles art appreciation1
Breasts woman big set 2
Exquisite decoration is not paying too much4
毛俊杰-能量永动机
乳娘帕梅拉安德森2
女人化妆前后的对比
Terrorist smile the largest human history an explosion1
Extremely rare TianShan Mountains snow lotus2
Men don't mature ten sign
两张抽象画
Download software ranking
Unix video tutorial6
Boxer Classic video1
Sora aoi‘s film--Lust fan wall
Tram sex maniac 2 (H) rar bag7
徐若瑄成名作“魔鬼天使”
Be there or be square
仙剑奇侠传98硬盘WINXP版
The Bermuda triangle3
Love the forty days
Unix video tutorial2
delv published in(发表于) 2014/1/8 7:00:59 Edit(编辑)
ASP.NET,2.0的异步页面刷新_[Asp.Net教程]

ASP.NET,2.0的异步页面刷新_[Asp.Net教程]

ASP.NET 2.0的异步页面刷新_[Asp.Net教程]

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异步回调函数在最终全部获得数据流后,通过调用


callback.Invoke(result);


来通知页面socket这边已经完成工作了。


于是ASP.NET唤起EndSubmitKeywordsAsyncOperation方法:


///


/// 异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).


///


///


void EndSubmitKeywordsAsyncOperation(IAsyncResult ar)


{


_resultDataset = _submit.getResultDataset(ar);


在这个函数中,我就可以拿到数据流了。


之后,ASP.NET又唤起Page_PreRender事件,从而可以在这个事件中,把页面上的表格正确填充了。


这样,就达到了我的目的。而且向后台提交后等待被再度激活超时了,也可以由


void TimeoutSubmitKeywordsAsyncOperation(IAsyncResult ar)


来做合适的处理。


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异步回调函数在最终全部获得数据流后,通过调用


callback.Invoke(result);


来通知页面socket这边已经完成工作了。


于是ASP.NET唤起EndSubmitKeywordsAsyncOperation方法:


///


/// 异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).


///


///


void EndSubmitKeywordsAsyncOperation(IAsyncResult ar)


{


_resultDataset = _submit.getResultDataset(ar);


在这个函数中,我就可以拿到数据流了。


之后,ASP.NET又唤起Page_PreRender事件,从而可以在这个事件中,把页面上的表格正确填充了。


这样,就达到了我的目的。而且向后台提交后等待被再度激活超时了,也可以由


void TimeoutSubmitKeywordsAsyncOperation(IAsyncResult ar)


来做合适的处理。


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.