c# WPF 不同窗口,调用公共类的方法,实现通过Http从远程服务下载一个或多个文件
时间: 2024-09-24 22:20:32 浏览: 49
在 C# 中,Windows Presentation Foundation (WPF) 提供了一种模块化的架构,使得你可以创建不同的窗口,并能够在一个共享的代码库中复用功能。如果你需要从远程服务通过 HTTP 下载一个或多个文件,可以按照以下步骤操作:
1. **创建一个公共类**:首先,建立一个名为 `FileDownloader` 的公共类,这个类将包含用于下载文件的方法。例如:
```csharp
public class FileDownloader
{
private readonly HttpClient _httpClient;
public FileDownloader()
{
_httpClient = new HttpClient();
}
// 使用async和await处理异步下载
public async Task DownloadFiles(string baseUrl, List<string> fileNames)
{
foreach (string fileName in fileNames)
{
try
{
string url = $"{baseUrl}/{fileName}";
HttpResponseMessage response = await _httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
{
using (var content = await response.Content.ReadAsStreamAsync())
{
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); // 或者自定义保存路径
File.WriteAllBytes(path, await content.ReadAsByteArrayAsync());
}
}
else
{
Console.WriteLine($"Failed to download {url}, status code: {response.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error downloading {fileName}: {ex.Message}");
}
}
}
}
```
2. **在窗口中调用方法**:每个需要下载文件的窗口上都可以实例化并使用 `FileDownloader` 类。比如在主窗口或一个独立的对话框中:
```csharp
private void Button_Click(object sender, RoutedEventArgs e)
{
var downloader = new FileDownloader();
List<string> fileNames = ... // 从用户输入或配置中获取文件名列表
downloader.DownloadFiles("http://yourremoteendpoint.com", fileNames);
}
```