Maison >développement back-end >C++ >Comment puis-je implémenter une notification de progression lors des téléchargements de fichiers avec HttpClient dans .NET 4.5 ?

Comment puis-je implémenter une notification de progression lors des téléchargements de fichiers avec HttpClient dans .NET 4.5 ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 18:52:42174parcourir

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

Utilisez .NET 4.5 HttpClient pour implémenter la notification de progression du téléchargement de fichiers

Dans .NET 4.5, l'interface IProgress<T> fournit un moyen de gérer efficacement les rapports de progression pour les opérations asynchrones. Cela vous permet d'implémenter une barre de progression ou un autre élément d'interface utilisateur pour informer l'utilisateur de l'état du téléchargement.

Télécharger la méthode d'extension avec rapport d'avancement

Afin de vous adapter au scénario de téléchargement de fichiers, vous pouvez utiliser la méthode personnalisée DownloadAsync pour étendre la classe HttpClient, qui contient 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>

Détails de mise en œuvre

Les méthodes d'extension dépendent de :

  1. Obtenez des informations d'en-tête HTTP pour déterminer la longueur du contenu afin de calculer la progression.
  2. Utilisez la méthode d'extension de réplication de flux asynchrone avec une fonctionnalité de rapport de progression.

Méthode d'extension de flux pour le suivi des progrès

Les progrès sont suivis en mettant à jour les IProgress<long> entrants. Cette méthode d'extension de copie de flux signale la progression du téléchargement :

<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>

Exemples d'utilisation

Vous pouvez utiliser cette méthode d'extension comme suit :

<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>

Cette extension vous permet d'implémenter une barre de progression lors du téléchargement de fichiers via HTTP tout en garantissant que les données demandées au serveur nécessitent un certificat, alors que DownloadOperations cette fonctionnalité n'est pas prise en charge.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn