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 ...
随机推荐
- CSS(一):CSS简介和基本语法
一.CSS简介 1.什么是CSS CSS:Cascading Style Sheet:即层叠样式表.样式定义了如何显示HTML或XHTML元素.包括对字体.颜色.边距.高度.宽度.背景图片.网页定位等 ...
- java-过滤器Filter_多个Filter的执行顺序
http://www.cnblogs.com/HigginCui/p/5772514.html [Filter链] *在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为一个 ...
- Maven中央仓库——你可能不知道的细节
地址 —— 目前来说,http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中,其它地址包括著名的ibiblio.org,都是镜像. ...
- 当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法
一般来讲,当我们点击手机上的back键之后,会直接调用activity的onbackpress()方法,或者我们也可以通过这样来进行捕捉点击事件 @Override public boolean on ...
- perl 利用管道读取压缩文件内容
perl的文件句柄不仅支持普通文件, 还支持管道,今天需要统计一个fastq文件中的序列数和碱基数,而NGS的fastq文件一般都是gzip压缩的,所以 需要读取压缩文件中的内容,代码如下: my ( ...
- 最短路径问题-Dijkstra
概述 与前面说的Floyd算法相比,Dijkstra算法只能求得图中特定顶点到其余所有顶点的最短路径长度,即单源最短路径问题. 算法思路 1.初始化,集合K中加入顶点v,顶点v到其自身的最短距离为0, ...
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...
- Loadrunner的Socket脚本关联小技巧
Socket脚本关联小技巧 我们在socket脚本调试的时候经常会遇到很多问题,比如:socket包中繁杂的二进制编码,socket数据如何进行截取,如何对socket数据包进行参数化等等,以下几点内 ...
- jquery+json实现分页效果
son作为一种轻量级的数据交换格式,由于其传输数据格式的方便性,今天偶然想将其应用于分页实现,分页做为web开发一个长久的话题,其应用的高效与重要性就不多说了本文主要技术:反射机制,Json数据格式, ...
- oracle数据库触发器(trigger)用法总结
from:http://blog.csdn.net/zhanzhib/article/details/48729417 触发器的意思就是当我们对数据库对象(一般是表或视图)进行insert.updat ...