2011-12-23 85 views
0

我试图创建一个程序,将检索网页标题给定的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); 
} 

谢谢。

+0

不“的代码似乎并没有工作”是什么意思? “FinishWebRequest”方法是否曾被调用过?它是否写了一个空的标题? – 2011-12-23 08:09:16

+0

@jimMischel在测试我的程序后,我发现一些更多的我意识到FinishWebRequest方法永远不会被调用(我之前感到困惑,因为VS在FinishWebRequest方法中的断点处停止)。正如你所看到的,我对异步和线程技术很陌生。 – zaza 2011-12-23 09:12:47

+0

@zaza好的是FinishWebRequest方法的近乎标准的例子。您提取标题的正则表达式也可以。你能指定你得到的错误吗?也许添加输出/错误到你的答案? – Abbas 2011-12-23 09:20:49

回答

1

我认为,问题是,你的程序结束,返回异步结果之前。 做完Console.Writeline之后的主线程死亡。

休息看起来不错。 BeginGetResponse在MSDN

+0

opps应该明确表示,它是一个GUI应用程序 – zaza 2011-12-23 07:31:45

0

将一个try/catch块周围的回调中的代码并查看是否有在那里被抛出异常。

否则一些更多的细节将是有益的。当你说代码没有被执行的时候,你实际上在代码中使用/使用断点,或者你认为这是基于你的控制台输出的情况吗?这个请求是来自你的应用程序的主窗口线程吗?