uwp - 如何在 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中示例的 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);
}
}
));
推荐阅读
- r - R:MCMC(蒙特卡洛马尔可夫链)采样的标准方法
- java - Java做而循环不继续
- c - Ruby sqlite3 gem 无法在 WSL 上编译
- javascript - 在反应的打字稿中简单重复调用数组在类似 3 例的 1 例中不起作用
- android - 在 Android 中将字符串转换或提取为地址类型
- jupyter-notebook - JupyterLab“文件保存错误”“内存不足”
- javascript - 跨平台自动节点版本设置
- docusignapi - 用于 Docusign 的 Power Automate 自定义连接器中的设置触发器
- javascript - JavaScript 学号验证问题
- python - 显示具有不同端点的 api 信息并使用烧瓶渲染