|
用http协议来下载网络上的文件,通常我们需要获取文件文件的下载进度和下载的速度来给用户等待过程的一个交代,那么在windows phone 7下可以使用WebClient类来实现这一功能,HttpWebRequest类也可以用于下载网络上的文件,不过HttpWebRequest类不能够直接地获取你http请求的完成情况。
使用WebClient.DownloadProgressChanged事件来异步获取http协议下载文件的进度情况,使用WebClient.DownloadStringCompleted事件来判断文件的下载是否完成。
using System;
using System.Net;
using System.Windows;
using Microsoft.Phone.Controls;
using System.Diagnostics;
namespace DownLoadTest
{
public partial class MainPage : PhoneApplicationPage
{
private long siz;
private long speed;
private Stopwatch sw;
private Stopwatch sw1;
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
testspeed();
}
public void testspeed()
{
WebClient client = new WebClient();
progressBar1.Value = 0.0;
textBox2.Text = "0 %";
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(this.webClient_DownloadStringCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(this.webClient_DownloadProgressChanged);
sw = Stopwatch.StartNew();//用来记录总的下载时间
sw1 = Stopwatch.StartNew();//用来记录下载过程中的时间片,用于计算临时速度
client.DownloadStringAsync(new Uri("http://dl_dir.qq.com/qqfile/qq/QQ2011/QQ2011.exe"));
}
//下载过程事件
public void webClient_DownloadProgressChanged(object s, DownloadProgressChangedEventArgs e)
{
textBox2.Text = e.ProgressPercentage.ToString() + " %";
sw1.Stop();
long num = e.BytesReceived / 1024;
if (sw1.Elapsed.Seconds != 0)
{
speed = num / ((long)sw1.Elapsed.Seconds);
}
textBlock4.Text = this.speed + " KB/sec";
progressBar1.Value = e.ProgressPercentage;
siz = e.TotalBytesToReceive;
textBlock3.Text = siz + "KB";
sw1.Start();
}
//下载完成事件
public void webClient_DownloadStringCompleted(object s, DownloadStringCompletedEventArgs e)
{
sw.Stop();
siz = siz/1024;
long num = siz / ((long)sw.Elapsed.Seconds);
sw.Reset();
textBox1.Text = "下载完成!";
textBlock1.Text = num + " KBytes/sec";
}
}
}
|
|
|
|
|
|
|