我试图创建一个程序,将检索网页标题给定的URL。我编写的代码适用于不使用AsyncCallback的情况,但是当我使用AsyncCallback时,代码似乎不起作用。AsyncHttpWebRequest(网页标题检索程序)
public void GetWebPageTitle(string URL)
{
// make request for web page
HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
myWebRequest.Method = "GET";
myWebRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), myWebRequest);
zConsole.WriteLine("Beginning HttpWebRequest for: " + URL);
}
void FinishWebRequest(IAsyncResult result)
{
zConsole.WriteLine("...");
string title = "Unknown";
//Code under here doesnt get extcuted
HttpWebResponse myWebResponse = (HttpWebResponse)((HttpWebRequest)result.AsyncState).EndGetResponse(result);
StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());
string source = "";
source = myWebSource.ReadToEnd();
myWebResponse.Close();
title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
zConsole.WriteLine(title);
}
谢谢。
不“的代码似乎并没有工作”是什么意思? “FinishWebRequest”方法是否曾被调用过?它是否写了一个空的标题? – 2011-12-23 08:09:16
@jimMischel在测试我的程序后,我发现一些更多的我意识到FinishWebRequest方法永远不会被调用(我之前感到困惑,因为VS在FinishWebRequest方法中的断点处停止)。正如你所看到的,我对异步和线程技术很陌生。 – zaza 2011-12-23 09:12:47
@zaza好的是FinishWebRequest方法的近乎标准的例子。您提取标题的正则表达式也可以。你能指定你得到的错误吗?也许添加输出/错误到你的答案? – Abbas 2011-12-23 09:20:49