你在currentSpeed = reeciveSpan * 1000 / span.Milliseconds / 1024;这句加个判断就行了
把currentSpeed = reeciveSpan * 1000 / span.Milliseconds / 1024;改为
if (span.Milliseconds != 0)
{
currentSpeed = reeciveSpan * 1000 / span.Milliseconds / 1024;
}
else
{
currentSpeed = 0;
}
这么写就行了,用进度条的话把最大值和最小值设为100和0,Value = e.ProgressPercentage 就行了
private void button1_Click(object sender, EventArgs e)
{
webClint = new WebClient();
start = DateTime.Now;
lastTime = DateTime.Now;
webClint.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClint_DownloadProgressChanged);
webClint.DownloadFileAsync(new Uri("http://www.highstreet5.com.sg/music/firefly.mp3"), "e:\\Fire Fly.mp3");
}
WebClient webClint;
float maxSpeed = 0;
float currentSpeed = 0;
float lastSpeed = 0;
long lastReceive = 0;
long reeciveSpan;
TimeSpan span;
DateTime start;
DateTime lastTime;
TimeSpan useTime;
void webClint_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
span = DateTime.Now - lastTime;
lastTime = DateTime.Now;
useTime = lastTime - start;
reeciveSpan = e.BytesReceived - lastReceive;
currentSpeed = reeciveSpan * 1000 / span.Milliseconds / 1024;
maxSpeed = currentSpeed > maxSpeed ? currentSpeed : maxSpeed;
lastSpeed = currentSpeed;
lastReceive = e.BytesReceived;
label1.Text = "已下载: " + e.BytesReceived / 1024 + "KB\n" +
"总大小: " + e.TotalBytesToReceive / 1024 + "KB\n" +
"百分比: " + e.ProgressPercentage + "%\n" +
"当前速度: " + currentSpeed.ToString("F2") + "KB/s\n" +
"最大速度: " + maxSpeed.ToString("F2") + "KB/s\n" +
"用时: " + (useTime.Minutes * 60 + useTime.Seconds) + "s";
if (e.BytesReceived == e.TotalBytesToReceive)
{
webClint.DownloadProgressChanged -= webClint_DownloadProgressChanged;
webClint.Dispose();
MessageBox.Show("任务完成!");
}
}
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。