首頁 >後端開發 >C++ >如何在 .NET 4.5 中使用 HttpClient 在文件下載過程中實現進度通知?

如何在 .NET 4.5 中使用 HttpClient 在文件下載過程中實現進度通知?

Linda Hamilton
Linda Hamilton原創
2025-01-12 18:52:42170瀏覽

How Can I Implement Progress Notification During File Downloads with HttpClient in .NET 4.5?

使用.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>

實作細節

擴充方法依賴:

  1. 取得HTTP頭資訊以確定內容長度,進而計算進度。
  2. 使用非同步流複製擴充方法,該方法具有進度報告功能。

用於進度監控的流擴展方法

進度透過更新傳入的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn