下面代码没有如期那样进行异步调用,不知道哪出了问题,请大神们指教,谢谢!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));
}

解决方案 »

  1.   

    奇怪,我如下调用,当第一个的时候会线程阻塞,后面的就不会了,这乍回事呢?void Button1Click(object sender, EventArgs e){
        string url="http://bbs.egou.com/forumdisplay.php?fid=19&page=2";
        for(int i=0;i<10;i++){
            BeginGetResponse(url,new AsyncCallback(OnResponse));
        }
    }
      

  2.   


    /// <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);
                */
            }
      

  3.   

    http://bbs.egou.com/forumdisplay.php?fid=19&amp;page=2  这个页面有问题吧    你的程序问题不大