您的位置:首页 > 编程语言 > ASP

MSDN官方的ASP.Net异步页面的经典示例代码

2008-03-09 21:51 513 查看
示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上

1

using System;
2

using System.Web;
3

using System.Web.UI;
4

using System.Web.UI.WebControls;
5

using System.Net;
6

using System.IO;
7

using System.Text;
8

using System.Text.RegularExpressions;
9


10

public partial class AsyncPage : System.Web.UI.Page
11





{
12

private WebRequest _request;
13


14

void Page_Load (object sender, EventArgs e)
15





{
16

AddOnPreRenderCompleteAsync (
17

new BeginEventHandler(BeginAsyncOperation),
18

new EndEventHandler (EndAsyncOperation)
19

);
20

}
21


22

IAsyncResult BeginAsyncOperation (object sender, EventArgs e,
23

AsyncCallback cb, object state)
24





{
25

_request = WebRequest.Create("http://msdn.microsoft.com");
26

return _request.BeginGetResponse (cb, state);
27

}
28

void EndAsyncOperation (IAsyncResult ar)
29





{
30

string text;
31

using (WebResponse response = _request.EndGetResponse(ar))
32





{
33

using (StreamReader reader =
34

new StreamReader(response.GetResponseStream()))
35





{
36

text = reader.ReadToEnd();
37

}
38

}
39


40

Regex regex = new Regex ("href//s*=//s*/"([^/"]*)/"",
41

RegexOptions.IgnoreCase);
42

MatchCollection matches = regex.Matches(text);
43


44

StringBuilder builder = new StringBuilder(1024);
45

foreach (Match match in matches)
46





{
47

builder.Append (match.Groups[1]);
48

builder.Append("<br/>");
49

}
50


51

Output.Text = builder.ToString ();
52

}
53

}
54


55


示例2:演示如何异步从数据库查询数据,并将返回的DataReader绑定到指定控件上


using System;


using System.Data;


using System.Data.SqlClient;


using System.Web;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.Configuration;




public partial class AsyncDataBind : System.Web.UI.Page






{


private SqlConnection _connection;


private SqlCommand _command;


private SqlDataReader _reader;






protected void Page_Load(object sender, EventArgs e)






{


if (!IsPostBack)






{


// Hook PreRenderComplete event for data binding


this.PreRenderComplete +=


new EventHandler(Page_PreRenderComplete);




// Register async methods


AddOnPreRenderCompleteAsync(


new BeginEventHandler(BeginAsyncOperation),


new EndEventHandler(EndAsyncOperation)


);


}


}


IAsyncResult BeginAsyncOperation (object sender, EventArgs e,


AsyncCallback cb, object state)






{


string connect = WebConfigurationManager.ConnectionStrings


["PubsConnectionString"].ConnectionString;


_connection = new SqlConnection(connect);


_connection.Open();


_command = new SqlCommand(


"SELECT title_id, title, price FROM titles", _connection);


return _command.BeginExecuteReader (cb, state);


}




void EndAsyncOperation(IAsyncResult ar)






{


_reader = _command.EndExecuteReader(ar);


}




protected void Page_PreRenderComplete(object sender, EventArgs e)






{


Output.DataSource = _reader;


Output.DataBind();


}




public override void Dispose()






{


if (_connection != null) _connection.Close();


base.Dispose();


}


}





示例3:异步调用WebService


using System;


using System.Data;


using System.Configuration;


using System.Web;


using System.Web.UI;


using System.Web.UI.WebControls;




public partial class AsyncWSInvoke1 : System.Web.UI.Page






{


private WS.PubsWebService _ws;


private DataSet _ds;




protected void Page_Load(object sender, EventArgs e)






{


if (!IsPostBack)






{


// Hook PreRenderComplete event for data binding


this.PreRenderComplete +=


new EventHandler(Page_PreRenderComplete);




// Register async methods


AddOnPreRenderCompleteAsync(


new BeginEventHandler(BeginAsyncOperation),


new EndEventHandler(EndAsyncOperation)


);


}


}




IAsyncResult BeginAsyncOperation (object sender, EventArgs e,


AsyncCallback cb, object state)






{


_ws = new WS.PubsWebService();


// Fix up URL for call to local VWD-hosted Web service


_ws.Url = new Uri(Request.Url, "Pubs.asmx").ToString();


_ws.UseDefaultCredentials = true;


return _ws.BeginGetTitles (cb, state);


}




void EndAsyncOperation(IAsyncResult ar)






{


_ds = _ws.EndGetTitles(ar);


}




protected void Page_PreRenderComplete(object sender, EventArgs e)






{


Output.DataSource = _ds;


Output.DataBind();


}




public override void Dispose()






{


if (_ws != null) _ws.Dispose();


base.Dispose();


}


}





示例4:还是异步调用WebService,但换了一种方法


using System;


using System.Data;


using System.Configuration;


using System.Web;


using System.Web.UI;


using System.Web.UI.WebControls;




public partial class AsyncWSInvoke2 : System.Web.UI.Page






{


private WS.PubsWebService _ws;


private DataSet _ds;




protected void Page_Load(object sender, EventArgs e)






{


if (!IsPostBack)






{


// Hook PreRenderComplete event for data binding


this.PreRenderComplete +=


new EventHandler(Page_PreRenderComplete);




// Call the Web service asynchronously


_ws = new WS.PubsWebService();


_ws.GetTitlesCompleted += new


WS.GetTitlesCompletedEventHandler(GetTitlesCompleted);


_ws.Url = new Uri(Request.Url, "Pubs.asmx").ToString();


_ws.UseDefaultCredentials = true;


_ws.GetTitlesAsync();


}


}




void GetTitlesCompleted(Object source,


WS.GetTitlesCompletedEventArgs e)






{


_ds = e.Result;


}




protected void Page_PreRenderComplete(object sender, EventArgs e)






{


Output.DataSource = _ds;


Output.DataBind();


}




public override void Dispose()






{


if (_ws != null) _ws.Dispose();


base.Dispose();


}


}





示例5:跟示例1差不多,但是加了TimeOut处理


using System;


using System.Web;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Net;


using System.IO;


using System.Text;


using System.Text.RegularExpressions;




public partial class AsyncPageTask : System.Web.UI.Page






{


private WebRequest _request;




protected void Page_Load(object sender, EventArgs e)






{


PageAsyncTask task = new PageAsyncTask(


new BeginEventHandler(BeginAsyncOperation),


new EndEventHandler(EndAsyncOperation),


new EndEventHandler(TimeoutAsyncOperation),


null


);


RegisterAsyncTask(task);


}




IAsyncResult BeginAsyncOperation(object sender, EventArgs e,


AsyncCallback cb, object state)






{


_request = WebRequest.Create("http://msdn.microsoft.com");


return _request.BeginGetResponse(cb, state);


}




void EndAsyncOperation(IAsyncResult ar)






{


string text;


using (WebResponse response = _request.EndGetResponse(ar))






{


using (StreamReader reader =


new StreamReader(response.GetResponseStream()))






{


text = reader.ReadToEnd();


}


}




Regex regex = new Regex("href//s*=//s*/"([^/"]*)/"",


RegexOptions.IgnoreCase);


MatchCollection matches = regex.Matches(text);




StringBuilder builder = new StringBuilder(1024);


foreach (Match match in matches)






{


builder.Append(match.Groups[1]);


builder.Append("<br/>");


}




Output.Text = builder.ToString();


}




void TimeoutAsyncOperation(IAsyncResult ar)






{


Output.Text = "Data temporarily unavailable";


}


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐