WebRequest实现异步页面请求

本文介绍如何使用WebRequest类的BeginGetResponse()方法进行异步页面请求,以避免在等待服务器响应时应用程序陷入阻塞状态。通过示例代码展示了如何定义回调委托来处理响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  WebRequest类的另一个特性就是可以异步请求页面。由于在给主机发送请求到接收响应之间有很长的延迟,因此,异步请求页面就显得比较重要。像WebClient.DownloadData()和WebRequest.GetResponse()等方法,在响应没有从服务器回来之前,是不会返回的。如果不希望在那段时间中应用程序处于等待状态,可以使用BeginGetResponse() 方法和 EndGetResponse()方法,BeginGetResponse()方法可以异步工作,并立即返回。在底层,运行库会异步管理一个后台线程,从服务器上接收响应。BeginGetResponse() 方法不返回WebResponse对象,而是返回一个执行IAsyncResult接口的对象。使用这个接口可以选择或等待可用的响应,然后调用EndGetResponse()搜集结果。
  也可以把一个回调委托发送给BeginGetResponse()方法。该回调委托的目的地是一个返回类型为void并把IAsyncResult引用作为参数的方法,当工作线程完成了搜集响应的任务后,运行库就调用该回调委托,通知用户工作已完成。如下面的代码所示,在回调方法中调用EndGetResponse()可以接收WebResponse对象:

 

public Form1()

{

   InitializeComponent();



   WebRequest wrq
= WebRequest.Create(http://www.baidu.com);

   wrq.BeginGetResponse(new AsyncCallback(OnResponse), wrq);     

}



protected void OnResponse(IAsyncResult ar)

{

   WebRequest wrq
= (WebRequest)ar.AsyncState;

   WebResponse wrs
= wrq.EndGetResponse(ar);



  
// read the response ...

}
 

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值