Windows Phone 8中的BackgroundTransferService未按预期工作。

时间:2013-07-02 02:21:19

标签: windows-phone-7 windows-phone-8 windows-phone

作为在线课程的一部分,我正在开发一个应用程序,从互联网上下载一些图像,然后将它们存储在手机中,最后访问图像,将它们放入列表框。

在一种方法中,我实现了以下内容:

if (BackgroundTransferService.Requests.Count() != 0)
{
    foreach (var item in BackgroundTransferService.Requests)
    {
        item.TransferProgressChanged += item_TransferProgressChanged;
        item.TransferStatusChanged += item_TransferStatusChanged;
    }
}

在Item_TransferStatusChanged中,我检查下载传输是否已完成,然后使用IsolatedStorageFile类调用另一种方法将图像存储在手机中。

但是,问题是下载传输过程会被冻结一些时间。比方说,我正在下载10张图片,并且过程会在6张图片中冻结。

任何线索或帮助为什么会发生这种情况会非常有帮助

问候!

1 个答案:

答案 0 :(得分:2)

在使用BackgroundTransferService之前,您必须考虑各种场景。

  1. Windows phone 8支持每个应用程序最多25个下载队列。在一次中,单个设备可以同时下载最多2个文件。因此,无论何时使用BackgroundTransferService添加内容,它都将进入队列。 因此,在向BackgroundTransferService队列中添加内容之前,请检查BackgroundTransferService.Requests.Count(),它必须小于25,否则Add将抛出异常。

  2. 在UI线程中触发TransferStatusChanged。如果您遇到任何异常,您的UI将会缓慢。我认为您的IsoloatedStorage代码正在抛出异常。

  3. 假设您开始下载并在完成之前关闭了应用程序。由于您正在使用此服务,所有文件将在应用程序关闭时下载,但是每当您尝试启动和下载文件时,下一个实例,BackgroundTransferService.Add将失败,因为BackgroundTransferService在队列中有25个项目。由于您关闭了应用程序,因此没有时间将其从队列中删除。建议在启动应用程序期间或在适用的任何地方删除这些文件。 代码段:

      public class BackgroundTransferServicesRequest
      {
         static public void RemoveCompletedBackgroundServicesFromQueue()
         {
           foreach (var v in BackgroundTransferService.Requests)
           {
              if (v.TransferStatus == TransferStatus.Completed)
             {
                BackgroundTransferService.Remove(v);
             }
           }
         }
      }