博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone WebClient的使用
阅读量:5222 次
发布时间:2019-06-14

本文共 3800 字,大约阅读时间需要 12 分钟。

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

                                        DownloadProcessChanged DownloadStringCompleted
                                               OpenReadCompleted OpenWriteCompleted
                                            UploadProcessChanged UploadStringCompletedDownload

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

 DownloadStringAsync的使用

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

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

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

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

    格式如下:

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

1

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 = 50;         image.Height = 50;         image.Source = new BitmapImage(u);         image.Margin = new Thickness(10,10,10,10);         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事件,不再详细列举。

转自:

转载于:https://www.cnblogs.com/lihaibo-Leao/p/3161249.html

你可能感兴趣的文章
带权并查集
查看>>
DB2基础(增删改查)
查看>>
python 常用的50个模块
查看>>
音视频合成相关
查看>>
懒,不是理由
查看>>
[二分][dfs]JZOJ 2748 最大立方体空间 80%做法
查看>>
Node post请求 通常配合ajax
查看>>
基于vue-cli,sass,vant的移动端项目
查看>>
MySQL 的数据库、表基本操作
查看>>
MySQL远程访问权限,允许远程连接的开启
查看>>
hive 创建表和导入数据实例
查看>>
Gibbs Sampling深入理解
查看>>
Bootstrap页面布局2 - 包含BS文件
查看>>
Sentinel限流示例:编码和注解限流
查看>>
Java 8 Optional类深度解析
查看>>
fuser 命令小结
查看>>
全局CSS的配置
查看>>
2018-2019-1 20165301 《信息安全系统设计基础》第八周学习总结
查看>>
round分析
查看>>
MyBatis的架构设计以及实例分析
查看>>