lena和shane,家庭日志,xulavigne,Lena&Shane

如何实现

C# WebClient 无法设置超时时间的解决办法

2015-06-24 Shane Jhu

WebClient 无法设置请求超时时间,在执行请求时遇到网络不通等情况会很大几率造成app挂起。

我们可以从WebClient派生一个新的类,重载GetWebRequest方法。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

/// <summary>
/// 为WebClient增加超时时间
/// <para>从WebClient派生一个新的类,重载GetWebRequest方法</para>
/// </summary>
public class NewWebClient : WebClient
{
    private int _timeout;

    /// <summary>
    /// 超时时间(毫秒)
    /// </summary>
    public int Timeout
    {
        get
        {
            return _timeout;
        }
        set
        {
            _timeout = value;
        }
    }

    public NewWebClient()
    {
        this._timeout = 60000;
    }

    public NewWebClient(int timeout)
    {
        this._timeout = timeout;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var result = base.GetWebRequest(address);
        result.Timeout = this._timeout;
        return result;
    }
}

使用与WebClient相同的调用方式调用建好的类,就可以设置超时时间:

NewWebClient myWebClient = new NewWebClient(30 * 60 * 1000);
byte[] myDataBuffer = myWebClient.DownloadData(url);
string result = Encoding.GetEncoding("GB2312").GetString(myDataBuffer);

测试可用,欢迎各位反馈。

本文由lenashane.com原创,转载请注明出处:查看原文

如果觉得文章还不错,请点个赞吧

8月 30 2020
太过信任,你或许会受骗,然而终日怀疑,你会饱受痛苦。

弗兰克•克莱恩 (Frank Crane 美国演员,导演)