当前位置:  开发笔记 > 编程语言 > 正文

设置webClient.DownloadFile()的超时

如何解决《设置webClient.DownloadFile()的超时》经验,为你挑选了2个好方法。

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



1> Beniamin..:

我的答案来自这里

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

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

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


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

2> abatishchev..:

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


在.Net 4.5+中你也可以使用`var taskDownload = client.DownloadFileTaskAsync(new Uri("http:// localhost/folder"),"filename")`然后`taskDownload.Wait(TimeSpan.FromSeconds(5)) ;`
我不想使用计时器或秒表.我想要一些内置的hack或api方法.使用计时器/秒表需要额外的线程观看,而这个功能可能已经实现,所以为什么要重新发明轮子
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有