在wp7中加载Web内容时显示进度条

时间:2012-03-19 09:28:51

标签: windows-phone-7

在我的WP7应用程序中,我从网上提供了一些简单的文本数据。

 string url = "home url";

 var request = HttpWebRequest.Create(url);

 var result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request);

这就是我使用数据的方式

private void ResponseCallback(IAsyncResult result)
{
    var request = (HttpWebRequest)result.AsyncState;
    var response = request.EndGetResponse(result);

    using (var stream = response.GetResponseStream())
    using (var reader = new StreamReader(stream))
    {
        var contents = reader.ReadToEnd();

        Dispatcher.BeginInvoke(()=>
            {
                someLabelValue.Text = contents;
            });
    }
}

我在布局中添加了一个不确定的进度条。现在我想在我的应用程序从Web加载数据时显示它。

我该怎么做?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

最简单的方法,看它工作就是在进行调用时将进度条的.Visiblility更改为Visible(顶部代码提取)并调用.Visibility =完成时折叠(在第二个示例中,在里面)你的BeginInvoke()块)。

答案 1 :(得分:1)

正如Shahar所说,当您的回叫开始时,您需要将进度条的可见属性设置为true,并在结束时将其设置为false。您可能还需要修改回调以获得所取得的进展。

您可以从WebResponse.ContentLength属性(示例中为response.ContentLength)获取要下载的数据总量。然后,不是调用ReadToEnd,而是以块的形式读取流,以便在下载完成之前更新下载的数量。

注意:ContentLength仅在服务器发送Content-Length HTTP标头时有效。出于性能原因,一些服务器在确定响应结束之前就开始发送响应。在这种情况下,他们不知道在发送HTTP头时响应有多大,因此无法设置ContentLength。在这种情况下,ContentLength设置为-1,您将无法计算完成的persentage。

最后,如果您要下载大文件,最好使用BackgroundTransferRequest对象,因为即使您的应用程序已停用或已被逻辑删除,这将继续有效。这只适用于Mango(7.1)版本。