设置超时

cyhcyhhychyc 2010-01-30 09:07:36
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;

}

这个是用webClient下载页面,如果请求超时就停一段时间后再请求,永不停止。不知道怎么设置超时时间,以及怎么让其循环不止。
上面那个本意是,如果出现超时异常,就执行catch块里的代码。代码和try块里一样,只是先停止一段时间。
...全文
303 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovexilove 2010-01-30
  • 打赏
  • 举报
回复
up
ziyouren521125 2010-01-30
  • 打赏
  • 举报
回复
帮顶吧
xingshungames 2010-01-30
  • 打赏
  • 举报
回复
不会帮你顶
浮生若梦丶 2010-01-30
  • 打赏
  • 举报
回复
qawszx 2010-01-30
  • 打赏
  • 举报
回复
Timer
微工程 2010-01-30
  • 打赏
  • 举报
回复
在session 里设置,长时间没有响应,就超时。要重新提交。
老Key 2010-01-30
  • 打赏
  • 举报
回复
晕乎。。。帮忙顶吧
khjian 2010-01-30
  • 打赏
  • 举报
回复
up
淡言淡语 2010-01-30
  • 打赏
  • 举报
回复
up
雷问X 2010-01-30
  • 打赏
  • 举报
回复
简单点呢,当超时的时候,你做一个 Catch we As WebException ,或者 不是用WebException 的话,直接会跳到 Catch As Exception中,然后在这里面继续调用你的请求方法就行了。加上你的进程睡眠。就可以隔开一段时间了。
非异步请求要设置超时时间 只需要按下面代码

Dim myRequest As WebRequest = CreateRequest(url, method, param)
myRequest.Timeout = 5 * 1000
ouc_ajax 2010-01-30
  • 打赏
  • 举报
回复

//下载委托
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;
}


⊙﹏⊙b汗,这个才是
ouc_ajax 2010-01-30
  • 打赏
  • 举报
回复

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;

}



楼主试试吧!
System.Threading.Thread.Sleep(200000); 你如果直接调用这个函数,阻塞的是当前线程,因此下载过程中界面肯定会一直假死!
cyhcyhhychyc 2010-01-30
  • 打赏
  • 举报
回复
不好意思,我不一定要用异步,我主要想实现,自动下载网页,能够设置超时。并且如果超时后,停一段时间再重新请求。

[Quote=引用 10 楼 wuyq11 的回复:]
httpwebrequest
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("");
    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
    System.Net.WebResponse response = request.GetResponse();
    using(System.IO.Stream resStream = response.GetResponseStream())
    {System.IO.StreamReader sr = new System.IO.StreamReader(resStream, encoding);
    string html =sr.ReadToEnd();
    resStream.Close();
    }
    sr.Close();

异步操作
[/Quote]
wuyq11 2010-01-30
  • 打赏
  • 举报
回复
httpwebrequest
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
System.Net.WebResponse response = request.GetResponse();
using(System.IO.Stream resStream = response.GetResponseStream())
{System.IO.StreamReader sr = new System.IO.StreamReader(resStream, encoding);
string html =sr.ReadToEnd();
resStream.Close();
}
sr.Close();

异步操作
cyhcyhhychyc 2010-01-30
  • 打赏
  • 举报
回复
莫非,大概,似乎,好像。。。。都是帮顶的呀,有没有解决问题的呀

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧