Tworzę aplikację Windows 10 UWP, która obejmuje BackgroundDownloader działa tylko na pulpicie, a nie na telefonie.BackgroundDownloader nie działa w przypadku mobilnego systemu Windows UWP?
Kod:
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;
}
}
Po linii await d.StartAsync().AsTask(cancellationToken.Token,progressCallback);
program nie kontynuować. I nie ma też błędów. To nie działa tylko na telefonie działa idealnie na pulpicie! czego mi brakuje?
to tylko wskazówka, ale przy starcie aplikacji po poprzednim zakończeniu należy wyliczyć wszystkie istniejące DownloadOperations i ponownie dołączyć je do bieżącej sesji. BackgroundDownloader nie obsługuje pobierania plików o tym samym identyfikatorze URI, więc jeśli jest gdzieś zawieszona funkcja DownloadOperation, może to spowodować problem. Zobacz https://msdn.microsoft.com/library/windows/apps/br207126 – Liero
Dzięki za wskazówkę Liero, wypróbowałeś to, ale nadal nie działa. – AbsoluteSith
Przetestowałem Twój kod w Mobile Emulator 10.0.10240 bez 'SoundClass', ponieważ nie wiem, co to jest i twój kod działa dobrze. Czy testujesz w Emulatorze lub w prawdziwym urządzeniu? Oto przykład [Transfer danych w tle] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTransfer) od firmy Microsoft, możesz przetestować go za pomocą identyfikatora URI użytego w kodzie, aby wyświetlić Jeśli działa. –