Question

J'utilise webClient.DownloadFile () pour télécharger un fichier. Puis-je définir un délai d'expiration pour que cela ne prenne pas autant de temps s'il ne peut pas accéder au fichier?

Était-ce utile?

La solution

Essayez WebClient.DownloadFileAsync () . Vous pouvez appeler CancelAsync () par minuteur avec votre propre délai.

Autres conseils

Ma réponse provient de ici

Vous pouvez créer une classe dérivée, qui définira la propriété timeout de la classe de base WebRequest :

using System;
using System.Net;

public class WebDownload : WebClient
{
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout { get; set; }

    public WebDownload() : this(60000) { }

    public WebDownload(int timeout)
    {
        this.Timeout = timeout;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}

et vous pouvez l'utiliser comme la classe WebClient de base.

En supposant que vous souhaitiez effectuer cette opération de manière synchrone, utilisez la méthode WebClient.OpenRead (...) et définissez le délai sur le flux renvoyé pour obtenir le résultat souhaité:

using (var webClient = new WebClient())
using (var stream = webClient.OpenRead(streamingUri))
{
     if (stream != null)
     {
          stream.ReadTimeout = Timeout.Infinite;
          using (var reader = new StreamReader(stream, Encoding.UTF8, false))
          {
               string line;
               while ((line = reader.ReadLine()) != null)
               {
                    if (line != String.Empty)
                    {
                        Console.WriteLine("Count {0}", count++);
                    }
                    Console.WriteLine(line);
               }
          }
     }
}

Dériver de WebClient et redéfinir GetWebRequest (...) pour définir le délai d'expiration @Beniamin suggéré, cela n'a pas fonctionné pour moi, mais cela a été le cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top