62,046
社区成员
发帖
与我相关
我的任务
分享
Dim myRequest As WebRequest = CreateRequest(url, method, param)
myRequest.Timeout = 5 * 1000
//下载委托
public delegate string DownLoadUrl(string url, string _encoding);
//点击下载按钮事件
private void button6_Click(object sender, EventArgs e)
{
DownLoadUrl handler = new DownLoadUrl(WaitSuccess);
//需要注意的是线程如果想改变主界面的值,例如想把TextBox的值等于返回值,最好是用this.Invoke(delegate)的方式
//而且这样的异步调用,会是线程进行,不会影响主界面
this.Invoke(new DownLoadUrl(WaitSuccess), "www.baidu.com", System.Text.Encoding.Default.EncodingName);
}
//等待下载完成的事件
private string WaitSuccess(string _url, string _encoding)
{
string url = "www.baidu.com";
DownLoadUrl handler = new DownLoadUrl(GetUrlHtml);
System.IAsyncResult result = handler.BeginInvoke(url, System.Text.Encoding.Default.EncodingName, null, null);
result.AsyncWaitHandle.WaitOne(); //采用异步等待的方式。直到取到合适的值
if (result.IsCompleted)
{
string resultUrl = handler.EndInvoke(result);
}
//这个地方可以进行正确下载后的处理事件,记得如果赋值,使用this.Invoke(delegate)的方式
return resultUrl;
}
//进行下载的线程(不断循环)
private string GetUrlHtml(string _url,string _encoding)
{
string pageHtml = string.Empty;
System.Net.WebClient _webclient = new System.Net.WebClient();
while (pageHtml == string.Empty)
{
try
{
byte[] repsonseData = _webclient.DownloadData(_url);
pageHtml = Encoding.GetEncoding(_encoding).GetString(repsonseData);
}
catch
{
//阻塞当前线程
System.Threading.Thread.Sleep(10000);
}
}
return pageHtml;
}
public string GetPageStringByGet(WebClient _webclient, string _url, int _encoding)
{
string pageHtml = string.Empty;
try
{
byte[] repsonseData = _webclient.DownloadData(_url);
pageHtml = Encoding.GetEncoding(_encoding).GetString(repsonseData);
}
catch
{
System.Threading.Thread.Sleep(200000);
byte[] repsonseData = _webclient.DownloadData(_url);
pageHtml = Encoding.GetEncoding(_encoding).GetString(repsonseData);
}
return pageHtml;
}