ホームページ >バックエンド開発 >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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。