首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient DownloadString卡住

WebClient DownloadString卡住
EN

Stack Overflow用户
提问于 2014-01-20 09:51:21
回答 1查看 1.9K关注 0票数 1

我有一个继承WebClient的类:

代码语言:javascript
复制
public class WebDownload : WebClient
{
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout { get; set; }

    public WebDownload() : this(10000) { }

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

在我的代码中,我循环了大量的Urls,然后用以下方法一个接一个地下载:

代码语言:javascript
复制
string source;
using (WebDownload client = new WebDownload()) // WebClient class inherits IDisposable
{
    client.Headers.Add("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:26.0) Gecko/20100101 Firefox/26.0");
    source = client.DownloadString(url);
}

return source;

我遇到的一个问题是,有时代码会卡在这个方法上:

代码语言:javascript
复制
source = client.DownloadString(url);

知道为什么会这样吗?如果请求失败,我使用10秒的Timeout来停止请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-26 23:32:14

如果您的DownloadString被卡住了,请尝试使用DownloadStringAsync。长时间运行的操作应该异步运行。

代码语言:javascript
复制
WebClient w = new WebClient();
w.DownloadStringCompleted += 
                   new DownloadStringCompletedEventHandler(downloadCompleted);
w.DownloadStringAsync(new Uri("http://stackoverflow.com"));

在本例中,自定义方法downloadCompleted在下载完成后发生,您将在Result属性中获得下载的字符串。

如果需要,可以使用CancelAsync取消异步操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21230779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档