下面代码没有如期那样进行异步调用,不知道哪出了问题,请大神们指教,谢谢!void BeginGetResponse(string url,AsyncCallback callBack){
HttpWebRequest req=WebRequest.Create(url) as HttpWebRequest;
req.Method=GET;
req.BeginGetResponse(callBack,req);
}
void OnResponse(IAsyncResult result){
HttpWebRequest req=result.AsyncState as HttpWebRequest;
HttpWebResponse resp=req.EndGetResponse(result) as HttpWebResponse;
}
//按钮事件
void Button1Click(object sender, EventArgs e){
string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
BeginGetResponse(url,new AsyncCallback(OnResponse));
}
HttpWebRequest req=WebRequest.Create(url) as HttpWebRequest;
req.Method=GET;
req.BeginGetResponse(callBack,req);
}
void OnResponse(IAsyncResult result){
HttpWebRequest req=result.AsyncState as HttpWebRequest;
HttpWebResponse resp=req.EndGetResponse(result) as HttpWebResponse;
}
//按钮事件
void Button1Click(object sender, EventArgs e){
string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
BeginGetResponse(url,new AsyncCallback(OnResponse));
}
string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
for(int i=0;i<10;i++){
BeginGetResponse(url,new AsyncCallback(OnResponse));
}
}
/// <summary>
/// 异步调用函数
/// </summary>
/// <param name="iar"></param>
private static void f_processHttpResponseAsync(IAsyncResult iar)
{
var rsb = new StringBuilder();
var encoding = Encoding.UTF8;
var request = iar.AsyncState as HttpWebRequest;
// 接收返回的页面
var response = request.EndGetResponse(iar) as HttpWebResponse;
if (response.StatusCode != HttpStatusCode.OK)
{
throw new System.Exception(response.StatusCode + ":HttpStatus异常:" +
response.StatusDescription);
}
var responseStream = response.GetResponseStream();
//Encoding.UTF8
using (var reader = new System.IO.StreamReader(responseStream, encoding))
{
var read = new Char[mByteLen];
var count = reader.Read(read, 0, mByteLen);
while (count > 0)
{
var str = new string(read, 0, count);
rsb.Append(str);
count = reader.Read(read, 0, mByteLen);
}
reader.Close();
reader.Dispose();
responseStream.Dispose();
responseStream.Close();
response.Close();
}
//Console替换为页面呈现容器即可
Console.WriteLine(rsb.ToString());
Console.ReadLine();
/*
异步调用例子
IAsyncResult result = request.BeginGetResponse(new AsyncCallback(f_processHttpResponseAsync), request);
//处理超时请求
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
new WaitOrTimerCallback(f_asyncTimeout), request, 1000 * 60 * 10, true);
*/
}