Windows Phone中的异步任务

时间:2014-03-06 22:35:11

标签: wpf asynchronous windows-phone task

我正在开发一款适用于Windows Phone的应用程序,我没有人帮助我...... 我有一个按钮,当点击它时,显示页面的正文内容。

在搜索了很多关于如何下载内容但没有冻结de UI之后,我发现这段代码对我来说很合适:

private async void btnBotao_Click(object sender, RoutedEventArgs e)
        {
            string returnedTaskTResult = await AccessTheWebAsync();

            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(returnedTaskTResult);
            var body = doc.DocumentNode.SelectSingleNode("//body").WriteContentTo();
            txb.Text = body;
        }

        public async Task<string> AccessTheWebAsync()
        {
            HttpClient client = new HttpClient();
            Task<string> getStringTask = client.GetStringAsync("PAGE");

            string urlContents = await getStringTask;

            return urlContents;
        }

我只是想知道这样做是否正确...因为我对线程几乎一无所知,即使这对我有用,也许这不是更好的方法来做到这一点......也许这是不完整的......

非常感谢!!

2 个答案:

答案 0 :(得分:1)

如果我没有完全错误,你可以这样写:

        Task<string> getStringTask = client.GetStringAsync("PAGE");

        string urlContents = await getStringTask;

        return urlContents;

也是这样的:

return await client.GetStringAsync("PAGE");

(稍微简单一些,代码更少,对我来说是件好事)当谈到逻辑部分时,如果使用await / async,框架将处理大部分内容。所以我没有看到任何导致问题的东西

答案 1 :(得分:1)

看起来不错 - 我唯一要改变的是简化语法:

public async Task<string> AccessTheWebAsync()
{
    HttpClient client = new HttpClient();
    return await client.GetStringAsync("PAGE");
}

你甚至可以完全删除“AccessTheWeb”功能,因为它只适合一行:

private async void btnBotao_Click(object sender, RoutedEventArgs e)
{
    string returnedTaskTResult = await new HttpClient().GetStringAsync("PAGE");

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(returnedTaskTResult);
    var body = doc.DocumentNode.SelectSingleNode("//body").WriteContentTo();
    txb.Text = body;
}