只要在网上打上体验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();
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
protected void Page_Load(object sender, EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
// //注册异步调用的Begin和End方法.
if (!IsPostBack)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//注册事件Page_PreRender执行完成时执行方法(其实这一个是不用写的,当你调试的时候你会发现Page_PreRenderComplete会运行了两次,因为页面打开时就已经应该运行了)
//this.PreRenderComplete += new EventHandler(Page_PreRenderComplete);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//**/
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**////注册异步调用的Begin和End方法.
AddOnPreRenderCompleteAsync(
new BeginEventHandler(BeginAsyncOperation), new EndEventHandler(EndAsyncOperation));
}
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
//异步调用开始方法(当执行此方法时,当前线程就回到线程池,等待为其它请求服务).
IAsyncResult BeginAsyncOperation(object sender, EventArgs e, AsyncCallback cb, object state)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
//_request = WebRequest.Create("http://blog.csdn.net/chengking/");
//return _request.BeginGetResponse(cb, state);
![](/Images/OutliningIndicators/InBlock.gif)
string connect = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
_connection = new SqlConnection(connect);
_connection.Open();
_command = new SqlCommand("select * from gsjbxx", _connection);
return _command.BeginExecuteReader(cb, state);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
//异步调用结束后的接收方法(异步操作执行完成后,会重新从线程池中取个线程为本页面请求服务).
void EndAsyncOperation(IAsyncResult ar)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
_reader = _command.EndExecuteReader(ar);
//为了确保我得到了相应的数据并可以显示在DATAVIEW中
table.Load(_reader);
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
protected void Page_PreRenderComplete(object sender, EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.GridView1.DataSource = table;
this.GridView1.DataBind();
}
大家也可以看看http://flier.cnblogs.com/archive/2005/12/27/305233.html这里的介绍, PageAsyncTask 的方式则是增强版本,除了异步页面处理开始和结束方法自身外,还可以提供在超时情况下的处理方法,以及处理时的状态对象,这一个就更好地处理了异步页面
最后提一提,不知道是不是个人电脑问题,在运行异步页面与不使用异步页面时,查看CPU的占用是异步页面的要比不使用异步的要底,这就可以证明使用异步可以减少服务器的负荷。