我试图(以编程方式)将客户端的数据下载到我的本地计算机,而他们的Web服务器非常、非常慢,这导致我的WebClient对象超时.

以下是我的代码:

WebClient webClient = new WebClient();

webClient.Encoding = Encoding.UTF8;
webClient.DownloadFile(downloadUrl, downloadFile);

有没有办法在此对象上设置无限超时?或者,如果没有,有没有人能帮我举个例子,告诉我另一种方法来做到这一点?

URL在浏览器中运行良好,只需3分钟即可显示.

推荐答案

可以扩展超时:继承原始WebClient类并重写webrequest getter来设置自己的超时,如下面的示例所示.

在我的例子中,MyWebClient是一个私有类:

private class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest w = base.GetWebRequest(uri);
        w.Timeout = 20 * 60 * 1000;
        return w;
    }
}

.net相关问答推荐

.NET最小API BadRequest响应不返回正文

与 Datagrid 的 SelectedItem 链接时的 WPF RadioButton 绑定问题

AsyncLocal 的语义与逻辑调用上下文有何不同?

xunit Assert.ThrowsAsync() 不能正常工作?

string.Format 如何处理空值?

设置日志(log)文件名以在 Log4j 中包含当前日期

使用 EPPlus 时如何设置列类型

为什么递归调用会导致不同堆栈深度的 StackOverflow?

C# 中的 myCustomer.GetType() 和 typeof(Customer) 有什么区别?

如何结合 ||条件语句中的运算符

为什么有些对象属性是 UnaryExpression 而有些是 MemberExpression?

为什么 C# 不推断我的泛型类型?

Find() 和 First() 抛出异常,如何改为返回 null?

log4net的正确使用方法(记录器命名)

让 String.Replace 只打整个单词的方法

List 是否保证项目将按照添加的顺序返回?

如何使用 DateTime 指定一天中的最晚时间

了解 C# 中的协变和逆变接口

忽略 LINQ to XML 中的命名空间

如何判断枚举是否包含数字?