2015-07-16 12 views
6

Sto cercando di scaricare un file utilizzando questo codice su un Windows 10 app universale:finestre 10 applicazioni non DownloadOperation partire

await downloadOperation.StartAsync().AsTask(token, progressCallback); 

Si sta lavorando su pc, ma sul cellulare a volte è non iniziare a scaricare e non anche dando un'eccezione finché non riavvio il cellulare. Si tratta di un bug nel sistema o mi manca qualcosa?

Edit 1:

stato del compito è "in attesa di attivazione", quindi non è un'eccezione. è solo in attesa e non si avvia finché non riavvio il telefono Sto provando sempre con lo stesso url e non ho questo problema sul pc. Riguarda solo il telefono. Le proprietà dell'attività sono le seguenti:

+0

* "Si tratta di un bug nel sistema" * In genere no, eccezioni compiti non sono gettati nel metodo normale. È necessario utilizzare i metodi contenuti nell'attività restituita per scoprire se è stata generata un'eccezione. Vedere https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.isfaulted(v=vs.110).aspx e https://msdn.microsoft.com/en-us/ library/system.threading.tasks.task.exception (v = vs.110) .aspx –

+0

Puoi provare l'esempio: https://github.com/Microsoft/Windows-universal-samples/tree/master/backgroundtransfer – kiewic

+0

@ RonBeyer lo stato dell'attività è "in attesa di attivazione", quindi non genera un'eccezione. è solo in attesa e non si avvia fino a quando non riavvio il telefono Sto provando sempre con lo stesso URL e non ho questo problema sul PC. Riguarda solo il telefono. –

risposta

3

Ho trovato il problema alla fine. quando avvio un'operazione di download e chiudo l'applicazione senza annullare l'operazione BackgroundDownloader mantiene l'operazione per l'avvio successivo dell'applicazione. quando il numero di operazioni di download raggiunge le operazioni simultanee massime consentite (credo 5) le operazioni successive saranno in lista di attesa() fino al termine delle operazioni precedenti. così mi sono dovuto fermare tutte le operazioni non completate quando l'applicazione inizia così:

Task.Run(async() => 
     { 
      var downloads = await BackgroundDownloader.GetCurrentDownloadsAsync(); 
      foreach (var download in downloads) 
      { 
       CancellationTokenSource cts = new CancellationTokenSource(); 
       download.AttachAsync().AsTask(cts.Token); 
       cts.Cancel(); 
      } 
      var localFolder = ApplicationData.Current.LocalFolder; 
      var files = await localFolder.GetFilesAsync(); 
      files = files.Where(x => x.Name.EndsWith("_")).ToList(); 
      foreach (StorageFile file in files) 
      { 
       await file.DeleteAsync(StorageDeleteOption.PermanentDelete); 
      } 
     }); 
+0

Non dovrebbe essere sufficiente fare "download.AttachAsync(). Cancel()" invece di usare CancellationTokenSource? – Amenti

Problemi correlati