我正在尝试创建一个程序来检索给定网址的页面标题。我编写的代码在我不使用AsyncCallback时有效,但是当我使用AsyncCallback时,代码似乎不起作用。
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);
}
感谢。
答案 0 :(得分:1)
我认为,问题是,在返回异步结果之前,程序结束了。 在执行Console.Writeline之后的主线程死了。
休息看起来没问题。在MSDN
的BeginGetResponse答案 1 :(得分:0)
在回调中的代码周围放置一个try / catch块,看看是否有任何东西抛出异常。
否则更多细节会有用。如果你说代码没有执行,你实际上是在单步执行代码/使用断点,还是假设这是基于你的控制台输出的情况?此请求是否来自应用程序的主窗口线程?