C#使用asycn/await模拟下载文件显示进度的方法实现
时间: 2023-12-26 19:03:37 浏览: 36
下面是一个使用async/await模拟下载文件并显示下载进度的方法实现:
```csharp
public async Task DownloadFileAsync(string url, string filePath)
{
using (var client = new WebClient())
{
var uri = new Uri(url);
var totalBytes = 0L;
var bytesReceived = 0L;
var buffer = new byte[8192];
var stopwatch = new Stopwatch();
// 获取文件大小
var fileInfo = await client.DownloadDataTaskAsync(uri);
totalBytes = fileInfo.LongLength;
// 开始下载
using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, 8192, true))
using (var downloadStream = await client.OpenReadTaskAsync(uri))
{
stopwatch.Start();
int bytesRead;
do
{
bytesRead = await downloadStream.ReadAsync(buffer, 0, buffer.Length);
await stream.WriteAsync(buffer, 0, bytesRead);
bytesReceived += bytesRead;
var progress = (double)bytesReceived / totalBytes;
var speed = (double)bytesReceived / stopwatch.Elapsed.TotalSeconds;
// 显示下载进度
Console.Write($"\rDownloading... {progress:P2} ({speed / 1024 / 1024:N2} MB/s)");
} while (bytesRead > 0);
stopwatch.Stop();
}
}
}
```
在这个方法中,我们使用WebClient类下载文件,并使用FileStream类将文件写入磁盘。我们使用OpenReadTaskAsync方法异步地读取下载流,并使用ReadAsync和WriteAsync方法异步地读取和写入数据。我们还使用Stopwatch类测量下载时间和速度,并在控制台上显示下载进度。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)