|
ASP.NET 2.0的异步页面刷新(1) 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),
|