Я пытаюсь обрабатывать процесс загрузки файла через BackgroundTransfer :: BackgroundDownloader в приложении C ++ / WinRT Windows 10 UWP.
Я вчера 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));
}
));
1 ответ
Чтобы обработать процесс загрузки файла через BackgroundTransfer :: BackroundDownloader, вы можете обратиться к сценарию Scenario1_Download образец в GitHub.
Основываясь на примере загрузки, вы можете изменить свой код 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);
}
}
));
Похожие вопросы
Новые вопросы
uwp
Универсальная платформа Windows - это общая программная платформа для всех устройств, работающих под управлением Windows 10, включая Desktop. Этот тег следует использовать для вопросов, касающихся разработки приложений UWP на любом из поддерживаемых семейств устройств. Могут быть добавлены другие теги, такие как используемые языки (C #, C ++ и т. Д.) И стиль API (Win32, WinRT и т. Д.). Упакованные приложения Win32 должны использовать тег Desktop-Bridge (возможно, в дополнение к UWP).