体验ASP.NET 2.0 中的异步页功能练习

     只要在网上打上体验ASP.NET 2.0 中的异步页功能就可以找到相关的资料,也把基本的的操作说得很好了。
http://dev.yesky.com/msdn/404/2387904.shtml大家可以上去看一看。

但在这文章最后写到(三).遗留问题.

  第二种方式: 数据库对象SqlCommand实现异步调用功能

  (对应示例代码中的页面: AsyncVisitDatabase.aspx),示例代码我始终没有调试成功!

  数据库里有数据,但显示不到GridView中去.

 那在这里我就补上去吧。

 

 private WebRequest _request;
     
private SqlConnection _connection;
 
private SqlCommand _command;
 
private SqlDataReader _reader;
    DataTable table 
= new DataTable();
 



protected void Page_Load(object sender, EventArgs e)
    
{
       
// //注册异步调用的Begin和End方法.
              if (!IsPostBack)
        
{
            
//注册事件Page_PreRender执行完成时执行方法(其实这一个是不用写的,当你调试的时候你会发现Page_PreRenderComplete会运行了两次,因为页面打开时就已经应该运行了)
              
//this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);

            
/**/
            
///注册异步调用的Begin和End方法.
            AddOnPreRenderCompleteAsync(
            
new BeginEventHandler(BeginAsyncOperation), new EndEventHandler(EndAsyncOperation));
        }

    }



//异步调用开始方法(当执行此方法时,当前线程就回到线程池,等待为其它请求服务).
 IAsyncResult BeginAsyncOperation(object sender, EventArgs e, AsyncCallback cb, object state)
 
{
 
//_request = WebRequest.Create("http://blog.csdn.net/chengking/");
 
//return _request.BeginGetResponse(cb, state);

     
string connect = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
 _connection 
= new SqlConnection(connect);
 _connection.Open();
 _command 
= new SqlCommand("select * from gsjbxx", _connection);
return _command.BeginExecuteReader(cb, state);


 }



 
//异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).
 void EndAsyncOperation(IAsyncResult ar)
 
{
 
     _reader 
= _command.EndExecuteReader(ar);
//为了确保我得到了相应的数据并可以显示在DATAVIEW中
     table.Load(_reader);

 }



 
protected void Page_PreRenderComplete(object sender, EventArgs e)
 
{
     
   
    
this.GridView1.DataSource = table;
     
this.GridView1.DataBind();
    
 }

大家也可以看看http://flier.cnblogs.com/archive/2005/12/27/305233.html这里的介绍, PageAsyncTask 的方式则是增强版本,除了异步页面处理开始和结束方法自身外,还可以提供在超时情况下的处理方法,以及处理时的状态对象,这一个就更好地处理了异步页面

最后提一提,不知道是不是个人电脑问题,在运行异步页面与不使用异步页面时,查看CPU的占用是异步页面的要比不使用异步的要底,这就可以证明使用异步可以减少服务器的负荷。

posted on 2008-01-10 19:17  笨雀  阅读(307)  评论(2编辑  收藏  举报