在我的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加载数据时显示它。
我该怎么做?有什么想法吗?
答案 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)版本。