WebClient

从MSDN中我们可以得知,WebClient的作用就是“Provides common methods for sending data to and receiving data from a resource identified by a URI.”也就是说我们可以通过这个类去访问与获取网络上的资源文件。

WebClient类不能被继承,我们可以通过WebRequest和WebResponse这两个类来处理向URI标示的资源和获取数据了。这两个类功能挺强大的,但不足之处的是利用WebRequest和WebResponse时设置过于复杂,使用起来颇为费劲。而WebClient可以理解为对WebRequest和WebResponse等协作的封装。它使人们使用起来更加简单方便,然后它也有先天不足的地方。那就是缺少对cookies/session的支持,用户无法对是否自动url转向的控制,还有就是缺少对代理服务器的支持等等,不过我们可以通过重写WebClient的一些方法来实现这些功能。

WebClient的函数与基本用法

WebClient提供四种将数据上载到资源的方法:

  • OpenWrite 返回一个用于将数据发送到资源的 Stream。
  • UploadData 将字节数组发送到资源并返回包含任何响应的字节数组。
  • UploadFile 将本地文件发送到资源并返回包含任何响应的字节数组。
  • UploadValues 将 NameValueCollection 发送到资源并返回包含任何响应的字节数组。

另外WebClient还提供三种从资源下载数据的方法:

  • DownloadData 从资源下载数据并返回字节数组。
  • DownloadFile 从资源将数据下载到本地文件。
  • OpenRead 从资源以 Stream 的形式返回数据。

WebClient与其他网络相关类的区别

WebClient和HttpWebRequst是用来获取数据的2种方式,一般而言,WebClient更倾向于“按需下载”,事实上掌握它也是相对容易的,而HttpWebRequst则允许你设置请求头或者对内容需要更多的控制,后者有点类似于form中的submit。虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程。

WebClient使用范例

private void button1_Click(object sender, RoutedEventArgs e)
{
    //通过WebClient方式去获取资源文件
    Uri uri = new Uri("http://localhost:2052/Images/cnblogs.png", UriKind.Absolute);
    WebClient webClient = new WebClient();
    webClient.OpenReadAsync(uri);

    //下载完成的事件,委托给一个参数为(object sender, OpenReadCompletedEventArgs e)的方法
    webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
}

void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{            
    Stream stream = e.Result;  
    BitmapImage bitmap = new BitmapImage();
    bitmap.SetSource(stream);
    this.image1.Source = bitmap;
}

results matching ""

    No results matching ""