Windows Phone WebClient的使用
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的使用的更多相关文章
- C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
原文:C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法. 一般我们在撰写Windows Phone ...
- Windows Phone 8.1又有什么新花样
今年微软新任CEO提出了“Mobile First and Cloud First”的发展战略,随着微软Mobile First战略的实行,开发者是时候重视Windows Phone了.你可能不相信, ...
- [.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)
[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux) 1.关于跨平台 上篇中介绍了MVC的发展历程,说到ASP.NET ...
- 在Windows中安装NodeJS的正确姿势
NodeJS已经非常流行了,而且可以预见他将继续受到追捧.这确实是一个不错的创举,想想看他现在能做什么吧 1.服务器程序(典型的就是用来做网站或者restful服务,主打就是多线程,非阻塞,最后,一个 ...
- Windows 搭建 .NET 跨平台环境并运行应用程序
写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...
- windows下React-native 环境搭建
公司决定试水react-native,mac审批还没下来,没办法,先用windows硬着头皮上吧. 参考文章: React Native 中文网官方文档 史上最全Windows版本搭建安装React ...
- c# WebClient文件下载
public void HttpDownload(string url, string path, ResourceType type) { using (var client = new WebCl ...
- [深入浅出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# ...
- 【Windows】为节省系统资源,停掉不必要的服务
1.windows服务名称(注册表名称)和显示名称对照表如下: < 显示名称 状态 服务名称 Application Management demand AppMgmt ASP.NET Stat ...
随机推荐
- Entity Framework应用:使用Code First模式管理存储过程
在EF中使用存储过程和使用视图是很相似的,一般会使用Database对象上的两个方法:SqlQuery和ExecuteSqlCommand.为了从存储过程中读取很多数据行,我们只需要定义一个类,我们会 ...
- 〖wordpress实用小技巧〗添加几个字符实现子目录访问转移到域名直接访问
http://www.henghengzhu.com/share/127.html —————————————————————————————————————————————————————————— ...
- node-webkit连接mysql
一.安装node.js mysql驱动库 node-webkit里面没有mysql模块的,我们需要安装mysql模块.我们可以使用npm(Node package manager)进行安装.这里使用到 ...
- EasyUI-datagrid中load,reload,loadData方法的区别
EasyUI比较常用,其中的datagrid比较复杂,它有其中有load,reload,loadData这三个方法,它们都有相同的功能,都是加载数据的,但又有区别. load方法,比如我已经定义一个d ...
- [svn] 在线安装
SVN地址:http://subclipse.tigris.org/update_1.6.x/
- 关于Cocos2d-x中使用完Blink动作后精灵突然消失的问题的解决
精灵使用Blink 执行完动作之后,消失不见了,原因是闪烁的过程中精灵刚好到空纹理(透明)的那部分,这时候用户通过某种操作中断闪烁动作,导致下个状态的时候,精灵依然停留在空纹理的状态.所以最好在精灵执 ...
- IOC关注服务(或应用程序部件)是如何定义的以及他们应该如何定位他们依赖的其它服务
IOC关注服务(或应用程序部件)是如何定义的以及他们应该如何定位他们依赖的其它服务.通常,通过一个容器或定位框架来获得定义和定位的分离,容器或定位框架负责: 保存可用服务的集合 提供一种方式将各种部件 ...
- e649. 处理焦点改变事件
component.addFocusListener(new MyFocusListener()); public class MyFocusListener extends FocusAdapter ...
- 什么是Apache ZooKeeper?
Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据.ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务. Zo ...
- 学习:List的扁平化 和 拼接
一.list_to_binary/1的参数:iolist类型的. 二.lists:concat(Things) -> string() Types: Things = [Thing] Thing ...