C#HttpWebRequest突然挂起程序。不早

C#HttpWebRequest突然挂起程序。不早,c#,httpwebrequest,C#,Httpwebrequest,早些时候,我提出了一个HttpWebRequest,它工作得非常好,我的StreamReader可以完美地读取网站的HTML 但是突然之间,在测试了它的功能并确认它工作了很多次之后,当涉及到StreamReader时,它挂起了程序。 我已尝试删除这一行,代码仍在继续 事情是这样的;我试着输入一个与我需要使用的不同的网站(我输入了www.google.com),结果效果非常好。所以我的错误结论是,只有我需要使用的网站,我不能再访问了,这让我觉得终端(网站)正在取消我的连接或阻止我或其他什么。但是H

早些时候,我提出了一个HttpWebRequest,它工作得非常好,我的StreamReader可以完美地读取网站的HTML

但是突然之间,在测试了它的功能并确认它工作了很多次之后,当涉及到StreamReader时,它挂起了程序。 我已尝试删除这一行,代码仍在继续

事情是这样的;我试着输入一个与我需要使用的不同的网站(我输入了www.google.com),结果效果非常好。所以我的错误结论是,只有我需要使用的网站,我不能再访问了,这让我觉得终端(网站)正在取消我的连接或阻止我或其他什么。但是HttpWebRequest本身没有挂起或任何东西,这一定意味着它成功地建立了对网站的请求

闲聊够了,下面是代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("website here");
MessageBox.Show("1"); //This is shown.
string HTMLLink = (new     StreamReader(request.GetResponse().GetResponseStream())).ReadToEnd(); //This is where the     program hangs....
MessageBox.Show("2"); //This is not shown! Below this isn't being executed.
if (HTMLLink.Length > 0)
{
    HTMLLink = HTMLLink.Substring(HTMLLink.IndexOf("uuu"), HTMLLink.Length -     HTMLLink.IndexOf("uuu"));
    HTMLLink = HTMLLink.Substring(0, HTMLLink.IndexOf("\" TARGET="));
    request = (HttpWebRequest)WebRequest.Create(HTMLLink);
    string HTML = (new     StreamReader(request.GetResponse().GetResponseStream())).ReadToEnd();
    if (HTML.Length > 0 && HTML.Contains(" </script><br><br><br>") && HTML.Contains("    <br><br><script "))
    {
        HTML = HTML.Substring(HTML.IndexOf(" </script><br><br><br>") + 22,     HTML.IndexOf("<br><br><script "));
        HTML = HTML.Substring(0, HTML.IndexOf("<br><br><script "));
        HTML = HTML.Replace("\r\n", "");
        HTML = HTML.Replace("\n", "");
        HTML = HTML.Replace("<br>", "\r\n");
        HTML = HTML.Replace("<BR>", "\r\n");
        HTML = HTML.Replace("<br />", "\r\n");
        HTML = HTML.Replace("<BR />", "\r\n");
        textBox.Text = HTML;
    }
}
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(“此处的网站”);
MessageBox.Show(“1”)//如图所示。
字符串HTMLINK=(新的StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd()//这就是程序挂起的地方。。。。
MessageBox.Show(“2”)//这是没有显示!下面这是没有被执行。
如果(htmlink.Length>0)
{
htmlink=htmlink.Substring(htmlink.IndexOf(“uuu”)、htmlink.Length-htmlink.IndexOf(“uuu”);
htmlink=htmlink.Substring(0,htmlink.IndexOf(“\”TARGET=“));
request=(HttpWebRequest)WebRequest.Create(htmlink);
字符串HTML=(新的StreamReader(request.GetResponse().GetResponseStream())).ReadToEnd();

如果(HTML.Length>0&&HTML.Contains(“


”)&&HTML.Contains(“

在调用
GetResponse
之前,请求不会被发送。如果请求挂起,我倾向于说站点没有响应。您是否尝试使用web浏览器连接到该URL并查看其是否工作?

WebRequest.GetResponse()
是一个阻塞调用。它将等待成功连接并接收响应,然后再将控制权返回给调用方,如果不成功,将抛出异常。此行为无法修改

但是,您通常不希望应用程序坐在那里等待某些事情发生,因此您通常将GetResponse()调用委托给另一个线程,这样您就可以在当前线程中继续执行其他工作


克服此问题的常用方法是异步调用。您将调用
BeginGetResponse()
,而不是调用GetResponse(),传入一个函数,该函数应在操作完成时执行(例如,包含当前方法的剩余部分,加上对
EndGetResponse()
的调用)。在后台线程中等待响应时,执行控制可以传递回调用方,由.NET线程池自动为您处理。

是的,这在前面已经起到了作用,您可以在网站www.lyrics007.com上看到它工作得很好:)。