2015-07-16 8 views
6

Próbuję pobrać plik za pomocą tego kodu w systemie Windows 10 uniwersalnej aplikacji:okna 10 aplikacje nie DownloadOperation zaczynające

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

to działa na PC, ale na telefon czasami to nie rozpocznie się pobieranie i nie nawet dając wyjątek, dopóki nie uruchomię ponownie urządzenia mobilnego. Czy to błąd w systemie, czy coś mi brakuje?

Edit 1:

stan zadania jest „oczekiwanie na aktywację” więc nie rzuca wyjątek. to tylko czekanie i nie rozpoczynanie aż do ponownego uruchomienia telefonu Próbuję zawsze z tym samym adresem URL i nie mam tego problemu na komputerze. Dotyczy tylko telefonu. Właściwości zadania są następujące:

+0

* „Czy to błąd w systemie” * Zazwyczaj nie wyjątki od zadań nie są rzucone w normalny sposób. Musisz użyć metod zawartych w zwróconym zadaniu, aby sprawdzić, czy wyjątek został zgłoszony. Zobacz https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.isfaulted(v=vs.110).aspx i https://msdn.microsoft.com/en-us/ library/system.threading.tasks.task.exception (v = vs.110) .aspx –

+0

Możesz wypróbować przykład: https://github.com/Microsoft/Windows-universal-samples/tree/master/backgroundtransfer – kiewic

+0

@ RonBeyer status zadania to "oczekiwanie na aktywację", więc nie rzuca wyjątku. to tylko czekanie i nie rozpoczynanie aż do ponownego uruchomienia telefonu Próbuję zawsze z tym samym adresem URL i nie mam tego problemu na PC. Dotyczy tylko telefonu. –

Odpowiedz

3

Znalazłem problem w końcu. po uruchomieniu operacji pobierania i zamknięciu aplikacji bez anulowania operacji, program BackgroundDownloader przechowuje operację dla następnego uruchomienia aplikacji. kiedy liczba operacji pobierania osiągnie maksymalne dozwolone operacje symultaniczne (myślę, że 5) kolejne operacje będą na liście oczekujących() do zakończenia poprzednich operacji. więc musiałem zatrzymać wszystkie niedokończone operacje, gdy aplikacja zaczyna tak:

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

Nie powinno wystarczyć wykonanie polecenia "download.AttachAsync(). Anuluj()" zamiast korzystać z kodu CancellationTokenSource? – Amenti

Powiązane problemy