webClient对象可用来下载XML文件,程序集等这些数据,其可以实现按需下载,所以还是有必要了解的。其主要包含几个事件:

                                        DownloadProcessChanged DownloadStringCompleted
                                               OpenReadCompleted OpenWriteCompleted
                                            UploadProcessChanged UploadStringCompletedDownload

那么需要注意的是,这些事件是针对不同类型的数据设计的,比如说若资源是txt,xml这些数据文件,可以使用DownloadStringAsync发送请求,然后处理DownloadStringCompleted事件,如果资源是视屏,压缩包这种Stream形式的数据,则可以使用OpenReadAsync发送请求,然后处理OpenReadCompleted事件,下面以这两种情况各取一个例子。

DownloadStringAsync的使用

        首先需要注意的是,使用WebCilent发送下载请求,每次都只能发送一次,如果第一次发送的请求还未获得返回数据时,再次向服务器发送第二个请求,这时候WebClient的对象属性IsBusy为真,这时会出现NotSupportedException

那么下面的例子以实现下载服务器端的图片为例:

1, 图片放在Web端的文件夹中

2,建立一个xml文件,存储图片的信息

格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<images>
<image uri="Images/2.jpg">
</image>
<image uri="Images/3.jpg">
</image>
</images>

3,Web端的工作就完成了,服务器端最后的目录如下:

4,在客户端的页面做下简单的设置,添加一个按钮与一个StackPanel控件即可

5,在按钮的Button的单击事件中添加处理程序,这里不要忘了添加Linq To xml的dll,最后详细后台代码如下:

private void button1_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri(HtmlPage.Document.DocumentUri,"Images.xml");
WebClient client = new WebClient();
client.DownloadStringCompleted+=new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.DownloadStringAsync(uri);
} private void client_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)
{
//使用Linq To XML处理数据
XmlReader reader=XmlReader.Create(new StringReader(e.Result));
XDocument doc = XDocument.Load(reader);
var list = (from image in doc.Descendants("image")
select new Uri(HtmlPage.Document.DocumentUri, image.Attribute("uri").Value)).ToList();
foreach (var u in list)
{
//动态加载
Image image = new Image();
image.Width = ;
image.Height = ;
image.Source = new BitmapImage(u);
image.Margin = new Thickness(,,,);
this.stackPanel1.Children.Add(image);
}
}

6,最后效果如下

OpenReadAsync的使用

         区别前面已经说到了,使用OpenReadAsync得到的是一个Stream形式的数据,我们在刚才的例子基础上进行小小的更改修改,

把存放照片的文件夹改为压缩包,客户端后台代码再做点变动即可。

private void button2_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri(HtmlPage.Document.DocumentUri, "Images.zip");
WebClient client = new WebClient();
client.OpenReadAsync(uri);
client.OpenReadCompleted+=new OpenReadCompletedEventHandler(client_OpenReadCompleted);
}

public void client_OpenReadCompleted(object sender,OpenReadCompletedEventArgs e)
{
Stream stream = e.Result;
//从压缩数据流获取一个图片
Uri uri = new Uri("2.jpg",UriKind.Relative);
StreamResourceInfo zip = new StreamResourceInfo(stream,null);
StreamResourceInfo img = Application.GetResourceStream(zip,uri);
//数据流转化为图片
BitmapImage bits = new BitmapImage();
bits.SetSource(img.Stream);
Image image = new Image();
image.Source = bits; this.stackPanel1.Children.Add(image);
}

需要注意的就是这个例子中文件的格式是zip的,改为rar的是无法通过的。

UploadStringAsync的使用

上传字符串形式的数据,使用UploadStringAsync,这里说明一个简单的示例,将用户输入的数据显示出来

1,首先创建一个名为MyHandler.ashx的HttpHandler类,添加简单的几行代码:

public void ProcessRequest(HttpContext context)
{
int length = context.Request.ContentLength;
byte [] bytes=context.Request.BinaryRead(length);
string msg = System.Text.Encoding.Default.GetString(bytes);
context.Response.ContentType = "text/plain";
context.Response.Write(msg);
}

2,在客户端的界面上加上一个TextBox即可,客户端后台代码:

private void button3_Click(object sender, RoutedEventArgs e)
{
string msg = this.textBox1.Text.ToString();
Uri uri = new Uri("http://localhost:50894/MyHandler.ashx");
WebClient client = new WebClient();
client.UploadStringCompleted+=new UploadStringCompletedEventHandler(client_UploadStringCompleted);
client.UploadStringAsync(uri,"Post",msg);
} public void client_UploadStringCompleted(object sender,UploadStringCompletedEventArgs e)
{
string msg = e.Result;
MessageBox.Show(msg);
}

可以看出对WebClient的使用就是关键的几步,关键在于对于数据处理的部分,最后页面的效果就不展示了。这里若需要实现流形式的数据写入到指定资源,只需调用OpenWriteAsync与OpenWriteCompleted事件,不再详细列举。

转自:http://www.cnblogs.com/626498301/archive/2010/05/29/1746983.html

Windows Phone WebClient的使用的更多相关文章

  1. C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。

    原文:C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法. 一般我们在撰写Windows Phone ...

  2. Windows Phone 8.1又有什么新花样

    今年微软新任CEO提出了“Mobile First and Cloud First”的发展战略,随着微软Mobile First战略的实行,开发者是时候重视Windows Phone了.你可能不相信, ...

  3. [.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)

    [.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux) 1.关于跨平台 上篇中介绍了MVC的发展历程,说到ASP.NET ...

  4. 在Windows中安装NodeJS的正确姿势

    NodeJS已经非常流行了,而且可以预见他将继续受到追捧.这确实是一个不错的创举,想想看他现在能做什么吧 1.服务器程序(典型的就是用来做网站或者restful服务,主打就是多线程,非阻塞,最后,一个 ...

  5. Windows 搭建 .NET 跨平台环境并运行应用程序

    写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...

  6. windows下React-native 环境搭建

    公司决定试水react-native,mac审批还没下来,没办法,先用windows硬着头皮上吧. 参考文章: React Native 中文网官方文档 史上最全Windows版本搭建安装React ...

  7. c# WebClient文件下载

    public void HttpDownload(string url, string path, ResourceType type) { using (var client = new WebCl ...

  8. [深入浅出WP8.1(Runtime)]Windows Phone 8.1和Silverlight 8.1的区别

    1.2.2 Windows Phone 8.1应用程序模型 Windows Phone 8.1支持多种开发语言来开发应用程序,包括C#.VB.JavaScript和C++,那么本书的代码主要是采用C# ...

  9. 【Windows】为节省系统资源,停掉不必要的服务

    1.windows服务名称(注册表名称)和显示名称对照表如下: < 显示名称 状态 服务名称 Application Management demand AppMgmt ASP.NET Stat ...

随机推荐

  1. iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)

    一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...

  2. Web API(四):Web API参数绑定

    在这篇文章中,我们将学习Web API如何将HTTP请求数据绑定到一个操作方法的参数中. 操作方法在Web API控制器中可以有一个或多个不同类型的参数.它可以是基本数据类型或复杂类型.Web API ...

  3. 超多的CSS3圆角渐变网页按钮

    <!DOCTYPE html><head><title>超多的CSS3圆角渐变按钮</title><style type="text/c ...

  4. 【转】淘宝技术牛p博客整理

    转自:http://blog.csdn.NET/zdp072/article/details/19574793 淘宝技术委员会是由淘宝技术部高级技术人员组成的一个组织,共分为Java分会.C/C++分 ...

  5. const 与#define 的比较

    const 与#define 的比较 C++ 语言可以用 const 来定义常量,也可以用 #define 来定义常量.但是前者比后 者有更多的优点: (1) const 常量有数据类型,而宏常量没有 ...

  6. Android 利用cursor来进行排序(转至http://blog.csdn.net/yangzongquan/article/details/6547860)

    主要思路是:override move系列的方法,让cursor以自己想要的顺序来移动,从而达到对cursor排序的目的.比如数组A0里有 4(0),3(1),1(2),2(3),括号内为位置,排序后 ...

  7. Making the iPhone vibrate (iPhone 振动)

    from: http://stackoverflow.com/a/4725039 There are two seemingly similar functions that take a param ...

  8. jQuery-替换和删除元素

    1.replaceWith方法 用提供的内容替换集合中所有匹配的元素并且返回被替换元素的集合 参数类型说明: 1)普通字符串(可包含各种html标签) 2)jQuery对象 ①使用$函数创建的新元素( ...

  9. C语言中,为什么字符串可以赋值给字符指针变量

    转载于:http://www.cnblogs.com/KingOfFreedom/archive/2012/12/07/2807223.html 本文是通过几篇转帖的文章整理而成的,内容稍有修改: 一 ...

  10. Unity3d + PureMVC框架搭建

    0.流程:LoginView-SendNotification()---->LoginCommand--Execute()--->调用proxy中的函数操作模型数据--LoginProxy ...