为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议,并没有为我工作,但是这样做。