Establecer tiempo de espera para webClient.DownloadFile ()
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?
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í.