窗口8检索HTML内容

时间:2014-03-06 13:28:02

标签: c# windows-8 httpwebresponse

这是一个从网站上检索html内容的简单功能。所以人们可以从中提取数据。 我只发现Window 8有http webservice来获取html。并且只发现了这种方式。如果有人有更好的方式请分享。

 protected  override void OnNavigatedTo(NavigationEventArgs e)
            {

                gethtml("URL");
            }

            public async void gethtml(string URL)
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
                WebResponse myResponse = await myRequest.GetResponseAsync();
                StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
                mainTxtBox.Text = sr.ReadToEnd();  
            }

由于窗口8只有httpwebrequest只有“GetResponseAsync”,我必须使用await。并且仅用于异步功能。 async函数只返回Task<>或无效。然后从任务<>更改其他格式是如此混乱和混乱。所以我让它返回void并将数据传输到其他全局源。 我没有找到任何简单的解释如何从任务中获取字符串。所以我用这种方式。

1 个答案:

答案 0 :(得分:1)

您的gethtml应该返回Task而不是void。只有异步事件处理程序可以安全地返回void

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    await gethtml("URL");
}

public async Task gethtml(string URL)
{
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
    WebResponse myResponse = await myRequest.GetResponseAsync();
    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
    mainTxtBox.Text = sr.ReadToEnd();  
}

但是,我会这样说:

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    mainTxtBox.Text = await gethtml("URL");
}

public async Task<string> gethtml(string URL)
{
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
    WebResponse myResponse = await myRequest.GetResponseAsync();
    StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
    return sr.ReadToEnd();  
}