如何解决如何处理BackgroundTransfer DownloadOperation C ++ / WinRT中的进度
我尝试处理c ++ / WinRT Windows 10 UWP App中通过BackgroundTransfer :: BackgroundDownloader下载文件的进度。
但是我不能实现这个正确的:(
这是我的示例代码(文件下载良好,但是如果我输入.Progress函数,则会出错:
Error C2280 'void *winrt::Windows::Foundation::IUnkNown::operator new(size_t)': attempting to reference a deleted function NativeModuleSample
代码:
BackgroundTransfer::BackgroundDownloader downloader{ BackgroundTransfer::BackgroundDownloader() };
BackgroundTransfer::DownloadOperation download = downloader.CreateDownload(uri,destinationFile);
auto progress = download.StartAsync();
progress.Progress(Windows::Foundation::AsyncoperationProgressHandler<BackgroundTransfer::DownloadOperation,BackgroundTransfer::BackgroundDownloadProgress>(
[=](Windows::Foundation::IAsyncoperationWithProgress<BackgroundTransfer::DownloadOperation,BackgroundTransfer::DownloadOperation> const sender,BackgroundTransfer::BackgroundDownloadProgress args) {
int progress_calc = (int)(100 * ((double)args.BytesReceived / (double)args.TotalBytesToReceive));
}
));
解决方法
要处理通过BackgroundTransfer :: BackroundDownloader下载文件的进度,可以参考GitHub中sample的Scenario1_Download。
根据有关下载的示例,您可以将代码progress.Progress(…)
更改为此:
progress.Progress(Windows::Foundation::AsyncOperationProgressHandler<Windows::Networking::BackgroundTransfer::DownloadOperation,Windows::Networking::BackgroundTransfer::DownloadOperation>(
[=](Windows::Foundation::IAsyncOperationWithProgress<Windows::Networking::BackgroundTransfer::DownloadOperation,Windows::Networking::BackgroundTransfer::DownloadOperation> const sender,Windows::Networking::BackgroundTransfer::DownloadOperation args) {
BackgroundDownloadProgress currentProgress = args.Progress();
UINT64 percent = 0;
if (currentProgress.TotalBytesToReceive > 0)
{
percent =(INT64)((double)currentProgress.BytesReceived * 100 / (double)currentProgress.TotalBytesToReceive);
}
}
));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。