使用.NET 4.5 HttpClient實作檔案下載進度通知
在.NET 4.5中,IProgress<T>
介面提供了一種有效處理非同步操作進度報告的方法。這允許您實現進度條或其他UI元素,以告知使用者下載狀態。
為了適應檔案下載場景,可以使用自訂的DownloadAsync
方法擴充HttpClient
類,該方法包含IProgress<T>
:
<code class="language-csharp">public static class HttpClientExtensions { public static async Task DownloadAsync(this HttpClient client, string requestUri, Stream destination, IProgress<float> progress = null, CancellationToken cancellationToken = default) { // ... 实现细节 ... } }</code>
擴充方法依賴:
進度透過更新傳入的IProgress<long>
來追蹤。此流複製的擴充方法在下載進度中報告進度:
<code class="language-csharp">public static class StreamExtensions { public static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress<long> progress = null, CancellationToken cancellationToken = default) { // ... 实现细节 ... } }</code>
您可以如下使用此擴充功能:
<code class="language-csharp">// 创建HTTP客户端 using (var client = new HttpClient()) { // 创建用于保存下载数据的文件 using (var file = new FileStream("download.dat", FileMode.Create)) { // 注册进度回调 var progress = new Progress<float>(p => Console.WriteLine($"Progress: {p * 100}%")); // 使用进度报告下载数据 await client.DownloadAsync(downloadUrl, file, progress); } }</code>
此擴充功能可讓您在透過HTTP下載檔案時實現進度條,同時確保來自伺服器要求的資料需要證書,而DownloadOperations
不支援此功能。
以上是如何在 .NET 4.5 中使用 HttpClient 在文件下載過程中實現進度通知?的詳細內容。更多資訊請關注PHP中文網其他相關文章!