【发布时间】:2016-02-20 08:50:33
【问题描述】:
我正在创建一个 Windows 10 UWP 应用,其中涉及 BackgroundDownloader,它仅适用于桌面,不适用于手机。
代码:
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); 行之后,程序不会继续。而且也没有错误。这不仅适用于手机,也适用于桌面!我错过了什么?
【问题讨论】:
-
这只是一个提示,但在上次终止后应用程序启动时,您应该枚举所有现有的 DownloadOperations 并将它们重新附加到当前会话。 BackgroundDownloader 不支持同一个 URI 的并发下载,因此如果有 DownloadOperation 挂在某处,则可能会导致问题。见msdn.microsoft.com/library/windows/apps/br207126
-
感谢 Liero 的提示,试过了,但还是不行。
-
我在没有
SoundClass的情况下在 Mobile Emulator 10.0.10240 中测试了您的代码,因为我不知道它是什么并且您的代码运行良好。您是在模拟器中还是在真实设备中进行测试?这是来自 Microsoft 的 Background transfer sample,您可以使用您在代码中使用的 URI 对其进行测试,看看它是否有效。 -
我尝试了一个不同的 Uri,它是一个不同的来源,它工作。但我想知道服务器端可能出了什么问题,因为我生成的 Uri 是完美的,并且正在浏览器和应用程序的桌面模式上运行?编辑:在另一部手机上尝试过,它也可以在那里工作。所以我想问题出在手机上。
-
@AbsoluteSith 你解决了吗?我的 Lumia 920 也有同样的问题。
标签: c# windows-runtime uwp windows-10-mobile