2012-03-19 83 views
2

在我的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; 
      }); 
    } 
} 

我增加了一个不确定的进度栏我的布局。现在我想在我的应用程序从网络加载数据时显示它。

我该怎么做?有任何想法吗?

+0

你使用MVVM模式吗? – MarcinJuraszek 2012-03-19 09:31:45

回答

2

最简单的方法是,在进行调用(顶级代码提取)并调用时,将进度条的可视性更改为可见.Visibility =完成时折叠(在第二个示例中,在你的BeginInvoke()块内)。

1

正如Shahar所说,当您的回拨开始时,您需要将进度栏的可见属性设置为true,当回拨结束时将false设置为false。您也可能需要修改回电以获取您所取得的进展。

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

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

最后,如果您正在下载大文件,最好使用BackgroundTransferRequest对象,因为即使您的应用程序已被禁用或逻辑删除,此对象仍可继续工作。尽管如此,这只在芒果(7.1)版本中可用。

相关问题