WebClient 无法设置请求超时时间,在执行请求时遇到网络不通等情况会很大几率造成app挂起。
我们可以从WebClient派生一个新的类,重载GetWebRequest方法。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
///
/// 为WebClient增加超时时间
/// 从WebClient派生一个新的类,重载GetWebRequest方法
///
public class NewWebClient : WebClient
{
private int _timeout;
///
/// 超时时间(毫秒)
///
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);
测试可用,欢迎各位反馈。