93 votes

Jeu de délai d'attente pour le client web.DownloadFile()

Je suis à l'aide d' webClient.DownloadFile() à télécharger un fichier puis-je définir un délai d'attente de sorte qu'il ne prendra pas si longtemps, si elle ne peut pas accéder au fichier?

261voto

Beniamin Points 2055

Ma réponse vient d' ici

Vous pouvez faire une classe dérivée, qui permettra de définir le délai d'attente de la propriété de la base WebRequest classe:

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 base de classe WebClient.

43voto

abatishchev Points 42425

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

3voto

jeffrymorris Points 146

En supposant que vous vouliez faire cela de manière synchrone, en utilisant le client web.OpenRead(...) la méthode et de définir le délai d'expiration sur le cours d'eau qu'il renvoie va vous donner 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écoulant de WebClient et dominante GetWebRequest(...) pour définir le délai @Beniamin suggéré, n'a pas fonctionné pour moi aussi, mais ce n'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X