设置webClient.DownloadFile()的超时

Unk*_*ech 91 .net c# webclient download

我正在使用webClient.DownloadFile()下载文件,我可以为此设置超时,这样如果它无法访问文件就不会花这么长时间吗?

Ben*_*min 253

我的答案来自这里

您可以创建派生类,它将设置基WebRequest类的超时属性:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以像基础WebClient类一样使用它.

  • 只是因为其他人遇到这个有用的代码我必须在调用base.GetWebRequest(地址)之前设置超时 (3认同)

aba*_*hev 42

试试WebClient.DownloadFileAsync().您可以CancelAsync()通过计时器调用自己的超时.

  • 在.Net 4.5+中你也可以使用`var taskDownload = client.DownloadFileTaskAsync(new Uri("http:// localhost/folder"),"filename")`然后`taskDownload.Wait(TimeSpan.FromSeconds(5)) ;` (8认同)
  • 我不想使用计时器或秒表.我想要一些内置的hack或api方法.使用计时器/秒表需要额外的线程观看,而这个功能可能已经实现,所以为什么要重新发明轮子 (2认同)