关闭应用程序时从 BackgroudDownloader 更新进度
Update progress from BackgroudDownloader when app is closed
我在我的 UWP 应用中使用 BackgroundDownloader,例如:
private async void StartDownload()
{
var destinationFile = await KnownFolders.VideosLibrary.CreateFileAsync("temp.zip", CreationCollisionOption.GenerateUniqueName);
var backgroundDownloader = new BackgroundDownloader();
var downloadOperation = backgroundDownloader.CreateDownload(fileUrl, destinationFile);
SendUpdatableToastWithProgress();
var progressCallback = new Progress<DownloadOperation>();
progressCallback.ProgressChanged += ProgressCallback_ProgressChanged;
var opProgress = await downloadOperation.StartAsync().AsTask(progressCallback);
}
private void ProgressCallback_ProgressChanged(object sender, DownloadOperation e)
{
if (e.Progress.TotalBytesToReceive > 0)
{
var br = e.Progress.BytesReceived;
var percent = br * 1.0 / e.Progress.TotalBytesToReceive;
UpdateToastProgress(percent);
}
}
即使 UWP 应用程序关闭,我是否有机会触发 ProgressChanged?
目前没有关于如何通过 Progress<DownloadOperation>
更新 BackgroundDonwloader
通知中的 BackgroundDonwloader
进度的可靠选项。
根据Microsoft documentation,BackgroundTask
可以根据实际系统状态暂停或终止。这可能会在 BackgroundDownloader
完成其工作之前发生,并且您的 Toast
通知看起来会 frozen.
此处最好的方法是使用 AdaptiveProgressBarValue.Indeterminate
更新应用暂停或退出事件中的 Toast
进度条,并发送适当的短信(例如,在后台完成下载等)。根据@Faywang - MSFT 的评论,即使应用程序已关闭或暂停,您仍然可以获得有关下载成功或失败的通知。
另一种方法是使用 extendedExecutionUnconstrained
来无限期地 运行 BackgroundTask
。在这种情况下,您将能够使用 'live' 数据更新 Toast
进度甚至更多,以通过 BackgroundDownloader
触发新的下载。这种方法的缺点是您的应用 cannot be listed in Microsoft Store.
我在我的 UWP 应用中使用 BackgroundDownloader,例如:
private async void StartDownload()
{
var destinationFile = await KnownFolders.VideosLibrary.CreateFileAsync("temp.zip", CreationCollisionOption.GenerateUniqueName);
var backgroundDownloader = new BackgroundDownloader();
var downloadOperation = backgroundDownloader.CreateDownload(fileUrl, destinationFile);
SendUpdatableToastWithProgress();
var progressCallback = new Progress<DownloadOperation>();
progressCallback.ProgressChanged += ProgressCallback_ProgressChanged;
var opProgress = await downloadOperation.StartAsync().AsTask(progressCallback);
}
private void ProgressCallback_ProgressChanged(object sender, DownloadOperation e)
{
if (e.Progress.TotalBytesToReceive > 0)
{
var br = e.Progress.BytesReceived;
var percent = br * 1.0 / e.Progress.TotalBytesToReceive;
UpdateToastProgress(percent);
}
}
即使 UWP 应用程序关闭,我是否有机会触发 ProgressChanged?
目前没有关于如何通过 Progress<DownloadOperation>
更新 BackgroundDonwloader
通知中的 BackgroundDonwloader
进度的可靠选项。
根据Microsoft documentation,BackgroundTask
可以根据实际系统状态暂停或终止。这可能会在 BackgroundDownloader
完成其工作之前发生,并且您的 Toast
通知看起来会 frozen.
此处最好的方法是使用 AdaptiveProgressBarValue.Indeterminate
更新应用暂停或退出事件中的 Toast
进度条,并发送适当的短信(例如,在后台完成下载等)。根据@Faywang - MSFT 的评论,即使应用程序已关闭或暂停,您仍然可以获得有关下载成功或失败的通知。
另一种方法是使用 extendedExecutionUnconstrained
来无限期地 运行 BackgroundTask
。在这种情况下,您将能够使用 'live' 数据更新 Toast
进度甚至更多,以通过 BackgroundDownloader
触发新的下载。这种方法的缺点是您的应用 cannot be listed in Microsoft Store.