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 ...
随机推荐
- ★ Maven的坑,tomcat插件6 不能与jdk8一起使用
Maven 集成Tomcat7插件 maven WEB项目启动没问题访问页面就报错:org.apache.jasper.JasperException: Unable to compile class ...
- jQueryEasyUi行编辑打造增删改查
var $obj;$(function() { $obj = $("#configQueryGrid"); $obj.datagrid({ loadMsg : '数据加载中请稍后… ...
- Jquery实现仿腾讯微薄的广播发表
前言: 由于这几天在学习Jquery的一些知识,比以前的感觉就是Jquery太强大了,很多很简单的功能以前在JavaScript要写几十行的代码而在Jquery中只用几行代码就搞定了,所以我决定好好学 ...
- .net开发遇到的一个问题
之前项目有个entity是写在Entity层的,相关的配置项也写死在程序里了,而且还是个static的配置,后来有了新需求,上峰指示要从CMS读取配置内容,大概是要在BLL实现,BLL依赖IBLL的I ...
- 3D MAX 人物骨骼建设
3DMax方面所涉及的专业知识: (1)一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. (2)骨骼架设: ...
- AppendMenu函数添加菜单
这个函数添加新项目到指定菜单的末尾.你可以使用appendmenu指定内容,外观,和菜单项行为. BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT uID ...
- e578. Setting the Clipping Area with a Shape
This example demonstrates how to set a clipping area using a shape. The example sets an oval for the ...
- 类加载器详解 (转至http://blog.csdn.net/jiangwei0910410003/article/details/17733153)
首先来了解一下字节码和class文件的区别: 我们知道,新建一个java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的 ...
- IFrame实现的无刷新(仿ajax效果)...
前台代码: <iframe style="display:none;" name="gg"></iframe> <form act ...
- jQuery-编辑选择结果(添加、筛选、过滤或检测)
编辑选择结果 操作 实例 效果 备注 添加 添加选择器 $("p").add(".a") 添加类名为a的选择器 并不影响源结果集 $(" ...