在wp7中加载网页内容时显示进度条
问题描述:
在我的WP7应用程序中,我从网络上收集了一些简单的文本数据。在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;
});
}
}
我增加了一个不确定的进度栏我的布局。现在我想在我的应用程序从网络加载数据时显示它。
我该怎么做?有任何想法吗?
答
最简单的方法是,在进行调用(顶级代码提取)并调用时,将进度条的可视性更改为可见.Visibility =完成时折叠(在第二个示例中,在你的BeginInvoke()块内)。
答
正如Shahar所说,当您的回拨开始时,您需要将进度栏的可见属性设置为true,当回拨结束时将false设置为false。您也可能需要修改回电以获取您所取得的进展。
您可以从WebResponse.ContentLength属性(在您的示例中为response.ContentLength)获取要下载的数据总量。然后,您不必调用ReadToEnd,而是以块的形式读取数据流,以便在下载完成之前更新下载的数量。
注意:ContentLength仅在服务器发送Content-Length HTTP标头时有效。出于性能原因,一些服务器在决定响应结束之前会开始发送响应。在这种情况下,他们不知道在发送HTTP头时响应会有多大,因此无法设置ContentLength。在这种情况下,ContentLength设置为-1,您将无法计算persentage complete。
最后,如果您正在下载大文件,最好使用BackgroundTransferRequest对象,因为即使您的应用程序已被禁用或逻辑删除,此对象仍可继续工作。尽管如此,这只在芒果(7.1)版本中可用。
你使用MVVM模式吗? – MarcinJuraszek 2012-03-19 09:31:45