2015-07-16 10 views
6

Ich versuche, eine Datei mit diesem Code auf einem Windows 10 Universal-App herunterladen:Fenster 10 apps DownloadOperation nicht starten

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

es auf dem PC arbeitet an Handy aber manchmal ist es nicht gestartet, das Herunterladen und nicht Ich gebe sogar eine Ausnahme, bis ich das Handy neu starte. Ist es ein Fehler im System oder mir fehlt etwas?

Edit 1:

den Status der Aufgabe "für die Aktivierung warten", so dass es eine Ausnahme nicht ist zu werfen. es ist nur warten und nicht starten, bis ich das Telefon neu starten Ich versuche immer mit der gleichen URL und ich habe dieses Problem nicht auf dem PC. Es geht nur um das Telefon. Die Eigenschaften der Aufgabe sind die folgenden:

+0

* „Ist es ein Fehler im System“ * Normalerweise nicht, Ausnahmen von Aufgaben werden nicht in der normalen Methode ausgelöst. Sie müssen die in der zurückgegebenen Task enthaltenen Methoden verwenden, um herauszufinden, ob eine Ausnahme ausgelöst wurde. Siehe https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.isfaulted(v=vs.110).aspx und https://msdn.microsoft.com/en-us/ Bibliothek/system.threading.tasks.task.exception (v = vs.110) .aspx –

+0

Sie können das Beispiel ausprobieren: https://github.com/Microsoft/Windows-universal-samples/tree/master/backgroundtransfer – kiewic

+0

@ RonBeyer der Status der Aufgabe ist "Warten auf Aktivierung", so dass es keine Ausnahme auslöst. es wartet nur und startet nicht, bis ich das Telefon neu starte Ich versuche immer mit der selben URL und ich habe dieses Problem nicht am PC. Es geht nur um das Telefon. –

Antwort

3

Ich fand das Problem schließlich. Wenn ich einen Download-Vorgang starte und die Anwendung schließe, ohne den Vorgang abzubrechen, behält BackgroundDownloader den Vorgang für den nächsten Anwendungsstart bei. Wenn die Anzahl der Download-Vorgänge die maximal zulässigen simultanen Operationen erreicht (ich denke 5), werden die nächsten Operationen auf der Warteliste() stehen, bis die vorherigen Operationen beendet sind. so hatte ich alle unvollendeten Operationen zu stoppen, wenn die Anwendung wie folgt beginnt:

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

Sollte es nicht genug sein, "download.AttachAsync(). Cancel()" anstatt die CancellationTokenSource zu verwenden? – Amenti