Windows phone 7 在wp7中加载web内容时显示进度条

Windows phone 7 在wp7中加载web内容时显示进度条,windows-phone-7,Windows Phone 7,在我的WP7应用程序中,我从web加载了一些简单的文本数据 string url = "home url"; var request = HttpWebRequest.Create(url); var result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request); 这就是我使用数据的方式 private void ResponseCallback(IAsyncResult result) {

在我的WP7应用程序中,我从web加载了一些简单的文本数据

 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加载数据时显示它


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

看到它工作的最简单方法是,在调用时将进度条的.Visibility更改为可见(顶部代码摘录),并在调用完成时将.Visibility=折叠(在第二个示例中,在BeginInvoke()块内).

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

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

注意:ContentLength仅在服务器发送ContentLength HTTP头时有效。出于性能原因,一些服务器在决定响应的结尾之前就开始发送响应。在本例中,他们不知道发送HTTP头时响应有多大,因此无法设置ContentLength。在本例中,ContentLength设置为-1,您将无法计算完整的百分比


最后,如果您正在下载一个大文件,那么最好使用BackgroundTransferRequest对象,因为即使您的应用程序已被停用或删除,它也会继续工作。这仅在Mango(7.1)版本中可用。

您使用MVVM模式吗?