c# - mywebclient - Establecer tiempo de espera para webClient.DownloadFile()
webclient c# example download file (3)
Estoy usando webClient.DownloadFile()
para descargar un archivo ¿puedo establecer un tiempo de espera para esto de modo que no demore tanto si no puede acceder al archivo?
Mi respuesta viene de here
Puede crear una clase derivada, que establecerá la propiedad de tiempo de espera de la clase WebRequest
base:
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 puedes usarlo como la clase base de WebClient.
Pruebe WebClient.DownloadFileAsync()
. Puede llamar a CancelAsync()
por temporizador con su propio tiempo de espera.
Suponiendo que quiere hacer esto de forma síncrona, usar el método WebClient.OpenRead (...) y establecer el tiempo de espera en el flujo 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 que @Beniamin sugirió, no funcionó para mí como, pero esto fue así.