如何在.net上为WebClient设置TimeOut?

我下载了一些文件,但我也想为webclient设置超时。 正如我所看到的那样,我们可以使用重写WebRequest。 我已经做了但它没有用。 我的意思是重写GetWebRequest方法不起作用..这是我的代码

public class VideoDownloader : Downloader { ///  /// Initializes a new instance of the  class. ///  /// The video to download. /// The path to save the video. public VideoDownloader(VideoInfo video, string savePath) : base(video, savePath) { } ///  /// Starts the video download. ///  public override void Execute() { // We need a handle to keep the method synchronously var handle = new ManualResetEvent(false); var client = new WebClient(); client.DownloadFileCompleted += (sender, args) => handle.Set(); client.DownloadProgressChanged += (sender, args) => this.OnProgressChanged(new ProgressEventArgs(args.ProgressPercentage)); this.OnDownloadStarted(EventArgs.Empty); client.DownloadFileAsync(new Uri(this.Video.DownloadUrl), this.SavePath); handle.WaitOne(); handle.Close(); this.OnDownloadFinished(EventArgs.Empty); } protected override WebRequest GetWebRequest(Uri address) { WebRequest w = base.GetWebRequest(address); w.Timeout = 10*1000; // 20 * 60 * 1000; return w; } } 

和下载课程

  public abstract class Downloader: WebClient { ///  /// Initializes a new instance of the  class. ///  /// The video to download/convert. /// The path to save the video/audio. protected Downloader(VideoInfo video, string savePath) { this.Video = video; this.SavePath = savePath; } protected override WebRequest GetWebRequest(Uri address) { WebRequest w = base.GetWebRequest(address); w.Timeout = 10 * 1000; // 20 * 60 * 1000; return w; } ///  /// Occurs when the download finished. ///  public event EventHandler DownloadFinished; ///  /// Occurs when the download is starts. ///  public event EventHandler DownloadStarted; ///  /// Occurs when the progress has changed. ///  public event EventHandler ProgressChanged; ///  /// Gets the path to save the video/audio. ///  public string SavePath { get; private set; } ///  /// Gets the video to download/convert. ///  public VideoInfo Video { get; private set; } ///  /// Starts the work of the . ///  public abstract void Execute(); protected void OnDownloadFinished(EventArgs e) { if (this.DownloadFinished != null) { this.DownloadFinished(this, e); } } protected void OnDownloadStarted(EventArgs e) { if (this.DownloadStarted != null) { this.DownloadStarted(this, e); } } protected void OnProgressChanged(ProgressEventArgs e) { if (this.ProgressChanged != null) { this.ProgressChanged(this, e); } } } 

我的错误在哪里? 注意:我想下载异步

来自MSDN Doc:

Timeout属性仅影响使用GetResponse方法进行的同步请求。 要使异步请求超时,请使用Abort方法。

因此,如果您要执行异步请求,我认为您需要管理自己的计时器,并在任何时间段后在实例上调用.Abort()。

在此MSDN页面上有一些示例代码显示.Abort()方法。