c# WPF 不同窗口,调用一个文件类,定义方法通过Http从远程服务下载一个或多个文件
时间: 2024-09-24 13:20:24 浏览: 36
在C# WPF (Windows Presentation Foundation) 中,如果你想要在不同的窗口里调用一个文件类,并且这个类包含一个用于从远程HTTP服务下载文件的方法,你可以按照以下步骤操作:
1. 首先,创建一个独立的`FileHandler`类,这个类可以包含一个静态方法,例如`DownloadFilesAsync`,它接受URL列表作为参数,并使用HttpClient来进行异步网络请求。
```csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;
public static class FileHandler
{
public static async Task DownloadFilesAsync(params string[] fileUrls)
{
using var httpClient = new HttpClient();
foreach (string url in fileUrls)
{
try
{
HttpResponseMessage response = await httpClient.GetAsync(url);
if (response.IsSuccessStatusCode)
{
using (var contentStream = await response.Content.ReadAsStreamAsync())
{
// 这里可以根据实际需求处理下载的文件,比如保存到本地或显示在UI上
// 例如:SaveToFile(contentStream, "file_name.ext");
}
}
else
{
Console.WriteLine($"Failed to download {url}. Status code: {response.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error downloading {url}: {ex.Message}");
}
}
}
private static void SaveToFile(Stream inputStream, string fileName)
{
// 将inputStream的内容写入本地文件
// 可能需要使用FileStream或其他相关的库
}
}
```
2. 现在,在WPF的不同窗口中,你可以通过注入`FileHandler`类并调用其`DownloadFilesAsync`方法。假设有一个窗口叫做`MainWindow.xaml.cs`,你可以这样做:
```csharp
using System.Collections.Generic;
// 在MainWindow.xaml.cs中
public partial class MainWindow : Window
{
private readonly FileHandler _fileHandler;
public MainWindow()
{
InitializeComponent();
_fileHandler = new FileHandler(); // 注册FileHandler实例
}
private async void DownloadButton_Click(object sender, RoutedEventArgs e)
{
List<string> urls = new List<string> { "http://example.com/file1", "http://example.com/file2" }; // 假设这是你要下载的URLs
await _fileHandler.DownloadFilesAsync(urls.ToArray());
}
}
```
每个有类似功能的窗口只需注入`FileHandler`实例并响应按钮点击事件调用下载方法即可。