BackgroundTransferService 多任务后台下载文件

 

代码

  1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13 using Microsoft.Phone.BackgroundTransfer;
14 namespace PhoneApp8
15 {
16 public partial class MainPage : PhoneApplicationPage
17 {
18
19 ///<summary>
20 /// 下载队列
21 ///</summary>
22 List<string> ListUrl = new List<string> {
23 "http://dl_dir.qq.com/qqfile/qq/QQ2011/QQ2011(Q_Plus)_2662.exe",
24 "http://dl_dir.qq.com/qqfile/qq/QQ2011/QQ2011.exe"
25
26 };
27 // 建構函式
28 public MainPage()
29 {
30 InitializeComponent();
31 this.Loaded+=new RoutedEventHandler(MainPage_Loaded);
32 }
33 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
34 {
35 ///再次显示此窗口,重新绑定事件
36 IEnumerator<BackgroundTransferRequest> BackgroundRequestList = BackgroundTransferService.Requests.GetEnumerator();
37 while (BackgroundRequestList.MoveNext())
38 {
39 BackgroundRequestList.Current.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(BackgroundRequest_TransferProgressChanged);
40 BackgroundRequestList.Current.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(BackgroundRequest_TransferStatusChanged);
41 }
42 base.OnNavigatedTo(e);
43 }
44 void MainPage_Loaded(object sender, RoutedEventArgs e) {
45 int id = 1;
46 ///显示控件
47 foreach (string Url in ListUrl)
48 {
49 Pro pro = new Pro()
50 {
51 VerticalAlignment = System.Windows.VerticalAlignment.Top,
52 Name = "pro_" + id,
53 Height = 90,
54 Width = 460,
55 Maximum = 0,
56 Value = 0,
57 Text = "0/0",
58 Url = Url,
59 Title = Url.Substring(Url.LastIndexOf("/") + 1)
60 };
61 this.panel.Children.Add(pro);
62 id++;
63 }
64 }
65 private void button_DownLoad_Click(object sender, RoutedEventArgs e)
66 {
67 IEnumerator<BackgroundTransferRequest> BackgroundRequestList = BackgroundTransferService.Requests.GetEnumerator();
68 while (BackgroundRequestList.MoveNext())
69 {
70 BackgroundTransferService.Remove(BackgroundTransferService.Find(BackgroundRequestList.Current.RequestId));
71 }
72 foreach (Pro pro in this.panel.Children)
73 {
74 ///这里 保存路径必须是shared/transfers/,我看到MSDN里面有人直接写transfers/,但是我写就报错。。
75 Uri SaveUri = new Uri("shared/transfers/" + pro.Title, UriKind.Relative);
76 BackgroundTransferRequest BackgroundRequest = new BackgroundTransferRequest(new Uri(pro.Url, UriKind.Absolute), SaveUri);
77 BackgroundRequest.TransferPreferences = TransferPreferences.AllowCellularAndBattery;
78 pro.ID = BackgroundRequest.RequestId;
79 //注册后台下载
80 BackgroundTransferService.Add(BackgroundRequest);
81 BackgroundRequest.TransferProgressChanged += new EventHandler<BackgroundTransferEventArgs>(BackgroundRequest_TransferProgressChanged);
82 BackgroundRequest.TransferStatusChanged += new EventHandler<BackgroundTransferEventArgs>(BackgroundRequest_TransferStatusChanged);
83 }
84
85 }
86 void BackgroundRequest_TransferStatusChanged(object sender, BackgroundTransferEventArgs e) {
87 IEnumerator<BackgroundTransferRequest> BackgroundRequestList = BackgroundTransferService.Requests.GetEnumerator();
88 while (BackgroundRequestList.MoveNext())
89 {
90 if (BackgroundRequestList.Current.RequestId == e.Request.RequestId) {
91 if (BackgroundRequestList.Current.TransferStatus == TransferStatus.Completed) {
92 BackgroundTransferService.Remove(BackgroundTransferService.Find(BackgroundRequestList.Current.RequestId));
93 foreach (Pro pro in this.panel.Children)
94 {
95 if (pro.ID == e.Request.RequestId) {
96 pro.Title = "[完成]" + pro.Title;
97 //完成后可转移到独立空间保存
98 }
99 break;
100 }
101 }
102 }
103 }
104 }
105 void BackgroundRequest_TransferProgressChanged(object sender, BackgroundTransferEventArgs e) {
106 foreach (Pro pro in this.panel.Children) {
107 if (pro.ID == e.Request.RequestId)
108 {
109 ///显示各个文件的进度
110 pro.Maximum = (int)e.Request.TotalBytesToReceive;
111 pro.Value = (int)e.Request.BytesReceived;
112 pro.Text = string.Format("{0}/{1}",
113 pro.Value,
114 pro.Maximum
115 );
116 break;
117 }
118 }
119
120 }
121
122 }
123 }

 

 

shared/transfers/

这个保存路径是微软定死的吗??。。。很纠结

posted @ 2011-11-07 11:35  十年一刻·i  阅读(1061)  评论(7编辑  收藏  举报