wpf 从服务器下载文件有进度提示 请详细点
时间: 2023-08-10 10:09:01 浏览: 55
好的,以下是一个简单的实现方法,可以实现从服务器下载文件并显示下载进度:
```csharp
private async void DownloadFile(string url, string localPath)
{
using (WebClient client = new WebClient())
{
// 订阅事件以获取下载进度
client.DownloadProgressChanged += WebClient_DownloadProgressChanged;
// 异步下载文件
await client.DownloadFileTaskAsync(url, localPath);
}
}
private void WebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
// 显示下载进度
progressLabel.Content = $"已下载 {e.BytesReceived} / {e.TotalBytesToReceive} 字节 ({e.ProgressPercentage}%)";
}
```
其中 `DownloadFile` 方法会异步下载文件,并订阅 `WebClient.DownloadProgressChanged` 事件以获取下载进度。`WebClient_DownloadProgressChanged` 事件处理程序会更新 UI 上的进度标签。
需要注意的是,`WebClient.DownloadProgressChanged` 事件可能不会在 UI 线程上触发,因此需要使用 `Dispatcher` 对象将更新操作转发到 UI 线程上。完整代码如下:
```csharp
private async void DownloadFile(string url, string localPath)
{
using (WebClient client = new WebClient())
{
// 订阅事件以获取下载进度
client.DownloadProgressChanged += WebClient_DownloadProgressChanged;
// 异步下载文件
await client.DownloadFileTaskAsync(url, localPath);
}
}
private void WebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
// 使用 Dispatcher 对象将更新操作转发到 UI 线程上
Dispatcher.Invoke(() =>
{
// 显示下载进度
progressLabel.Content = $"已下载 {e.BytesReceived} / {e.TotalBytesToReceive} 字节 ({e.ProgressPercentage}%)";
});
}
```
另外,如果需要在下载过程中取消下载,可以使用 `WebClient.CancelAsync()` 方法取消下载。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)