为webClient.DownloadFile()设置超时

我正在使用webClient.DownloadFile()下载一个文件,我可以设置这个超时,这样它不会花很长时间,如果它不能访问该文件?

尝试WebClient.DownloadFileAsync() 。 你可以用你自己的超时时间来调用CancelAsync()

我的答案来自这里

您可以创build一个派生类,它将设置基础WebRequest类的timeout属性:

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

您可以像使用基本的WebClient类一样使用它。

假设你想同步做到这一点,使用WebClient.OpenRead(…)方法,并设置它返回的stream的超时将给你所需的结果:

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

从WebClient派生和重写GetWebRequest(…)来设置超时@Beniaminbuild议,并没有为我工作,但是这样做。