之前在wp7后台文件传输之-----BackgroundTransferService(一)中讲述了WP7后台传输的种种限制,本来计划是要做一个后台上传的,但是想到上传还需要写服务端,作为一个懒人,太麻烦,还是写一个下载好了.
后台传输的流程大概是这样的:
1.New一个BackgroundTransferRequest对象,设置URL地址,同时配置一堆HTTP头参数
2.设置下载到本地的地址.注意:下载的地址必须在独立存储中的shared/transfers/目录下.
3.把这个BackgroundTransferRequest Add到BackgroundTransferService中,然后就OK了.
为了监控下载的状态,还需要写一个页面,列出当前正在执行的任务,同时提供取消,暂停等方法.注:这也是包含后台下载功能的APP 提交到市场必须要做的内容.
创建下载任务的代码:

//首先判断下载存储区是否存在,不存在则创建一个using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()){if (!isoStore.DirectoryExists("/shared/transfers"))        {                isoStore.CreateDirectory("/shared/transfers");        }}//指定需要下载的文件的URLstring downloadurl="http://create.msdn.com/assets/cms/images/samples/windowsphonetestfile1.png";Uri transferUri = new Uri(Uri.EscapeUriString(downloadurl), UriKind.RelativeOrAbsolute);//创建Request对象BackgroundTransferRequest transferRequest = new BackgroundTransferRequest(transferUri);//设置一些请求的属性transferRequest.Method = "GET";string downloadFile = "windowsphonetestfile1.png";Uri downloadUri = new Uri("shared/transfers/" + downloadFile, UriKind.RelativeOrAbsolute);transferRequest.DownloadLocation = downloadUri;transferRequest.Tag = downloadFile;transferRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery;//这里需要根据情况进行设置,详细内容参见这里http://msdn.microsoft.com/zh-cn/library/microsoft.phone.backgroundtransfer.transferpreferences(v=vs.92).aspx//添加到下载列表中.这里要注意的是,每一个应用同时只能有5个请求在下载列表中BackgroundTransferService.Add(transferRequest);

到这里,任务添加代码就写好了.
接下来看看任务监控的代码.
任务监控主要是监控任务列表中,任务的TransferStatusChanged和TransferProgressChanged事件,前者是任务状态变更的时候会触发,后者是任务进度改变的时候会触发.
下面是代码:

//首先声明一个List来存放下载的列表IEnumerable<BackgroundTransferRequest> transferRequests;//然后写一个方法来刷新UI,这个刷新方式挺奇特.- -!private void UpdateRequestsList(){//如果list不为空,那么首先将他释放掉.不然会内存溢出        if (transferRequests != null)        {foreach (var request in transferRequests)                {                    request.Dispose();                }        }//然后把BackgroundTransferService里面的Request放到这个List里        transferRequests = BackgroundTransferService.Requests;}

//接下来,为每一个请求绑定两个事件foreach (var transfer in transferRequests){        transfer.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferStatusChanged);        transfer.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(transfer_TransferProgressChanged);}

//在每次事件触发的时候,去做相应操作        void transfer_TransferStatusChanged(object sender, BackgroundTransferEventArgs e)        {            ProcessTransfer(e.Request);            UpdateUI();        }

void transfer_TransferProgressChanged(object sender, BackgroundTransferEventArgs e)        {            UpdateUI();        }

//这个方法就是用来统一处理每一个请求需要做的操作        private void ProcessTransfer(BackgroundTransferRequest transfer)        {switch (transfer.TransferStatus)            {case TransferStatus.Completed:

//一般来说,服务器返回200或者206就表示传输成功完成,我们可以文件移到另外一个地方                    if (transfer.StatusCode == 200 || transfer.StatusCode == 206)                    {                        RemoveTransferRequest(transfer.RequestId);

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())                        {string filename = transfer.Tag;if (isoStore.FileExists(filename))                            {                                isoStore.DeleteFile(filename);                            }                            isoStore.MoveFile(transfer.DownloadLocation.OriginalString, filename);                        }                    }else                    {                        RemoveTransferRequest(transfer.RequestId);

if (transfer.TransferError != null)                        {// Handle TransferError if one exists.                        }                    }break;            }        }

写了这么多,大致的内容就是,如果下载完成了,就把文件转移,并且从下载列表中移除,这里需要注意的是,下载请求必须由开发者手工移除,不然他会一直都在那里.
如果下载进度有变更,那么就刷进度条的UI.
应该说,整个BackgroundTransferService的使用还是非常便捷的,麻烦的是UI的处理,但是这也是提交到商店必须做的.所以没办法.
到这里一个可以后台下载文件的APP,就差不多做好了.当然,还有删除请求什么的,蛮简单,这里没写出来.附件的工程里面有的.

PS.以上代码不是完整代码,完整代码到附件中去下载.

本文章同步发表在WPDevN: http://www.wpdevn.com/showtopic-51.aspx

转载于:https://www.cnblogs.com/spidernet/archive/2012/03/05/2381120.html

wp7后台文件传输之-----BackgroundTransferService(二)相关推荐

  1. Dreamweaver 8的后台文件传输

    Dreamweaver 8 新功能图文实例讲解,后台文件传输 [摘 要]和Macromedia Studio 8套件中其它软件一样,Dreamweaver 8也增加了许多让我们欣喜不已的新功能,比如更 ...

  2. mvc 扫描二维码跳转内部指定页面_开源神器:一个二维码,让文件传输不设限!...

    大家好,我是小 G. 今天给大家推荐一个在前不久火遍 GitHub 的开源项目:QRCP. 从项目的命名你们应该就能大致猜测出来,这款神器的主要作用,就是能通过指定二维码,快速完成文件的传输功能. 项 ...

  3. Android 蓝牙 OPP文件传输-Obex协议连接-socket连接 从framework到协议栈btif层 --- 全网最详细(二)

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 一.概述 今 ...

  4. agsXMPP + Openfire 即时通讯开发(二) 【文件传输】

    上篇bolg(agsXMPP + Openfire 即时通讯开发(一) [agsXMPP 连接 Openfire])中agsXMPP的MiniClient已经可以相互之间进行通讯了,本篇介绍如何进行文 ...

  5. socket编程二十二:socket编程实现文件传输功能

    这节我们来完成 socket 文件传输程序,这是一个非常实用的例子.要实现的功能为:client 从 server 下载一个文件并保存到本地. 编写这个程序需要注意两个问题: 1) 文件大小不确定,有 ...

  6. FTP文件传输协议详解

    简介:FTP是基于TCP协议之上的具有C/S架构的文件服务器. 需要通过控制连接20端口来控制双方的通信 需要通过数据连接21端口来进行双方的通信 主动模式:最大的特点是数据连接由服务器的20端口主动 ...

  7. 项目实战:基于 TCP 的局域网内高性能文件传输系统设计与实现

    本项目开发基于 Red Hat Enterprise Linux(RHEL) 6.3 平台 ,通过本项目大家会深入理解下述内容: Socket 网络编程技术 基于TCP/IP 协议的网络编程技术 基于 ...

  8. 自制微信文件传输助手,实现数据安全传输与存储

    从日常使用微信文件传输助手来看,传输助手并非点对点传输,所有信息在传输中都将被中转存储在公用服务器上,传输信息的安全性难以得到保障.本文将基于 fiora 开源项目,以目的为导向重写项目,自制文件传输 ...

  9. linux nc 传送文件,Linux下nc命来实现文件传输

    发送端: cat test.txt | nc -l -p 6666 或者nc -l -p 6666 < test.txt 有些版本不要在 -p [监听6666端口,等待连接](设发送端IP为10 ...

最新文章

  1. 计算机二级理工类报哪个,计算机二级考哪一科目,毕业后找工作会对科目有要求吗?还是说不管什么科目有证就行了?...
  2. 在Java中是如何定义和声明接口的?
  3. 一个基于J2EE的web应用程序运行起来需要什么?
  4. RMAN快速入门指南
  5. 服务器备份文件ctf,GUET-CTF 题目备份
  6. mstsc局域网远程 要预先做的设置
  7. 带权中位数-算法导论第三版第九章思考题9-2
  8. LeetCode 413 等差数列划分
  9. mathematica 下载安装注册激活大本营
  10. 3d激光雷达开发(pcl安装和使用)
  11. mysql int类型 int(11) 和int(2)区别
  12. [线筛五连]线筛欧拉函数
  13. 第1章 初始JAVA
  14. highcharts向下钻取饼图
  15. 多项分布(一种离散分布)
  16. 三星s窗口共享android,使用 S 窗口共享轻松让您的三星手机连接电脑
  17. 杭州电子科技大学acm--2021
  18. 规则库捕获漏洞信息专用脚本
  19. 端游服务器文件转成手游,苦等三年,当年画面最好的端游终于要做成手游了!...
  20. 全球与中国N-苯基马来酰亚胺粉市场深度研究分析报告

热门文章

  1. SVN本地代码未提交而被覆盖
  2. 你刚才淘宝上买衣服---具体分析技术工艺(淘宝页面显示处理的页面)
  3. QML与Qt C++ 交互机制详解
  4. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy
  5. android浮于上方布局,android-在FrameLayout中使RecyclerView上方的视图...
  6. django 按钮的样式_【实战演练】Python+Django网站开发系列11-成绩查询与成绩录入...
  7. Android中dp与px互转的方法
  8. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (下)
  9. Envoy Proxy构建控制平面指南
  10. 查找ipa包,删除接的ipa包