Définir le délai d’attente pour webClient.DownloadFile ()

J’utilise webClient.DownloadFile() pour télécharger un fichier. webClient.DownloadFile() je définir un délai d’attente pour qu’il ne soit pas si long s’il ne peut pas accéder au fichier?

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

Ma réponse vient d’ ici

Vous pouvez créer une classe dérivée, qui définira la propriété timeout de la classe 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; } } 

et vous pouvez l’utiliser comme la classe WebClient de base.

En supposant que vous vouliez faire cela de manière synchrone, en utilisant la méthode WebClient.OpenRead (…) et en définissant le délai d’attente sur le Stream qu’elle renvoie, vous obtiendrez 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)) { ssortingng line; while ((line = reader.ReadLine()) != null) { if (line != Ssortingng.Empty) { Console.WriteLine("Count {0}", count++); } Console.WriteLine(line); } } } } 

Dériver de WebClient et substituer GetWebRequest (…) pour définir le délai d’expiration suggéré par @Beniamin, n’a pas fonctionné pour moi, mais cela a été le cas.