mirror of
https://github.com/zhaopeiym/IoTClient
synced 2025-10-19 22:14:31 +08:00
73 lines
3.1 KiB
C#
73 lines
3.1 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace IoTClient.Tool
|
|
{
|
|
public partial class UpgradeForm : Form
|
|
{
|
|
public UpgradeForm()
|
|
{
|
|
InitializeComponent();
|
|
TopMost = true;
|
|
StartPosition = FormStartPosition.CenterScreen;
|
|
FormBorderStyle = FormBorderStyle.FixedSingle;
|
|
CheckForIllegalCrossThreadCalls = false;
|
|
Task.Run(async () =>
|
|
{
|
|
await DownloadAsync();
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
});
|
|
}
|
|
|
|
public async Task DownloadAsync()
|
|
{
|
|
long downloadSize = 0;//已经下载大小
|
|
long downloadSpeed = 0;//下载速度
|
|
using (HttpClient http = new HttpClient())
|
|
{
|
|
var httpResponseMessage = await http.GetAsync("https://download.haojima.net/api/IoTClient/Download", HttpCompletionOption.ResponseHeadersRead);//发送请求
|
|
var contentLength = httpResponseMessage.Content.Headers.ContentLength; //文件大小
|
|
if (contentLength == null)
|
|
{
|
|
MessageBox.Show("服务器忙,请稍后再试。");
|
|
return;
|
|
}
|
|
using (var stream = await httpResponseMessage.Content.ReadAsStreamAsync())
|
|
{
|
|
var readLength = 102400;//100K
|
|
byte[] bytes = new byte[readLength];
|
|
int writeLength;
|
|
var beginSecond = DateTime.Now.Second;//当前时间秒
|
|
//使用追加方式打开一个文件流
|
|
var filePath = Application.StartupPath + @"\temp." + Path.GetFileName(Application.ExecutablePath);
|
|
using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write))
|
|
{
|
|
while ((writeLength = stream.Read(bytes, 0, readLength)) > 0)
|
|
{
|
|
fs.Write(bytes, 0, writeLength);
|
|
downloadSize += writeLength;
|
|
downloadSpeed += writeLength;
|
|
progressBar1.Invoke((Action)(() =>
|
|
{
|
|
var endSecond = DateTime.Now.Second;
|
|
if (beginSecond != endSecond)//计算速度
|
|
{
|
|
downloadSpeed = downloadSpeed / (endSecond - beginSecond);
|
|
Text = "下载速度" + downloadSpeed / 1024 + "KB/S";
|
|
beginSecond = DateTime.Now.Second;
|
|
downloadSpeed = 0;//清空
|
|
}
|
|
progressBar1.Value = Math.Max((int)(downloadSize * 100 / contentLength), 1);
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|