微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理BackgroundTransfer DownloadOperation C ++ / WinRT中的进度

如何解决如何处理BackgroundTransfer DownloadOperation C ++ / WinRT中的进度

我尝试处理c ++ / WinRT Windows 10 UWP App中通过BackgroundTransfer :: BackgroundDownloader下载文件的进度。

我昨天阅读了10次文档: https://docs.microsoft.com/en-us/uwp/api/windows.foundation.iasyncoperationwithprogress-2.progress?view=winrt-19041#Windows_Foundation_IAsyncOperationWithProgress_2_Progress

但是我不能实现这个正确的:(

这是我的示例代码文件下载良好,但是如果我输入.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 举报,一经查实,本站将立刻删除。