2015-11-18 43 views
7

我正在創建一個Windows 10 UWP應用程序,其中涉及BackgroundDownloader這隻適用於桌面,而不是在手機上。BackgroundDownloader不適用於Windows 10移動版UWP?

代碼:

var dl = new BackgroundDownloader(); 
    dl.CostPolicy = BackgroundTransferCostPolicy.Always; 
    file = await localSoundsFolder.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting); 
    if (file != null) 
    { 
     var d = dl.CreateDownload(new Uri(uriToDownloadFrom,UriKind.RelativeOrAbsolute), file); 
     d.Priority = BackgroundTransferPriority.High; 

     var progressCallback = new Progress<DownloadOperation>(x => DownloadProgress(x, sc)); 
     try 
     { 
      await d.StartAsync().AsTask(cancellationToken.Token,progressCallback); 
      //After this line it doesn't progress! 
      CancellationTokenSource token = Utility.cancellationList[sc]; 
      if (token != null) 
      { 
       token.Cancel(); 
       Utility.cancellationList.Remove(sc); 
       Debug.WriteLine("The sc has been removed from the download list"); 
      } 
     } 
     catch 
     { 
      return; 
     } 
    } 


private static void DownloadProgress(DownloadOperation download,SoundClass sc) 
{ 
    Debug.WriteLine("Callback"); 
    var value = download.Progress.BytesReceived * 100/download.Progress.TotalBytesToReceive; 
    Debug.WriteLine("The bytesReceived is {0} and total bytes is {1}", download.Progress.BytesReceived.ToString(), download.Progress.TotalBytesToReceive.ToString()); 
    new System.Threading.ManualResetEvent(false).WaitOne(10); 
    sc.downloadProgress = value; 
    if (download.Progress.Status == BackgroundTransferStatus.Completed || value >= 100) 
    { 
     Debug.WriteLine("DONE donwloading the file {0}", download.ResultFile.Name); 
     Debug.WriteLine("The file name happened to be to be added was " + download.ResultFile.Name); 
     string fileName = download.ResultFile.Name; 
    } 
} 

await d.StartAsync().AsTask(cancellationToken.Token,progressCallback);程序不進行行之後。而且也沒有錯誤。這不僅僅能夠在電話上正常工作!我錯過了什麼?

+0

這只是一個提示,但在應用程序啓動之後,應該枚舉所有現有的DownloadOperations並將它們重新連接到當前會話。 BackgroundDownloader不支持同一URI的同時下載,所以如果掛載某處的DownloadOperation可能會導致問題。請參閱https://msdn.microsoft.com/library/windows/apps/br207126 – Liero

+0

感謝提示Liero,試過這個,但它仍然不工作。 – AbsoluteSith

+0

我在沒有'SoundClass'的Mobile Emulator 10.0.10240中測試了你的代碼,因爲我不知道它是什麼,你的代碼運行良好。您是在模擬器還是在真實設備中測試?這是來自Microsoft的[後臺傳輸示例](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTransfer),您可以使用您在代碼中使用的URI對其進行測試如果它有效。 –

回答

0

BackgroundDownloader和我認爲Windows UWP中的所有BackgroundTasks都很難與它們一起工作。 您必須首先在您當前的解決方案中創建一個新的解決方案作爲Windows運行時組件。 之後,你必須通過Package.AppxManifest鏈接它。 呃,別忘了讓運行時組件作爲你主項目的參考。 如果你做這些事情希望它一定是工作。但要確保你有一個RuntimeComponent,並將它鏈接到你的項目中

+0

我非常懷疑我們需要創建一個BackgroundTask以便進行後臺下載。所以這不是一個真正的解決方案。 – AbsoluteSith

0

我們一直在努力解決完全相同的問題,但是在通用Windows 10應用程序上 - 而不是電話上。在我們的案例中,罪魁禍首是Windows 10的節電模式。在Windows 10設備上,點擊電池圖標。這應該會帶來電池和屏幕亮度飛出。禁用電池模式。

對於使用Background Downloader的任何應用程序(包括MSDN下載示例應用程序),其效果都是相同的。

再次,這不是在移動設備上,但它一直髮生在我們的Windows 10應用程序。希望它與手機類似。

0

在我的情況相同的代碼不會調試模式時,通過電話與USB電纜連接到筆記本電腦工作,但它的工作原理是下載和發佈模式下安裝應用程序。