Pregunta

Estoy usando webClient.DownloadFile () para descargar un archivo. ¿Puedo establecer un tiempo de espera para que no tome tanto tiempo si no puede acceder al archivo?

¿Fue útil?

Solución

Pruebe WebClient.DownloadFileAsync () . Puede llamar a CancelAsync () por temporizador con su propio tiempo de espera.

Otros consejos

Mi respuesta proviene de aquí

Puede crear una clase derivada, que establecerá la propiedad de tiempo de espera de la clase 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;
    }
}

y puede usarlo como la clase base de WebClient.

Suponiendo que desea hacer esto sincrónicamente, utilizando el método WebClient.OpenRead (...) y configurando el tiempo de espera en el Stream que devuelve le dará el resultado deseado:

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);
               }
          }
     }
}

Derivar de WebClient y anular GetWebRequest (...) para establecer el tiempo de espera sugerido por @Beniamin, no funcionó para mí, pero esto sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top