Establecer tiempo de espera para webClient.DownloadFile ()

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?

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

Mi respuesta viene de aquí

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 { ///  /// Time in milliseconds ///  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.

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í.