Я пытаюсь написать код, который проверяет наличие обновления в магазине Windows, и загрузить его оттуда. Я работаю на C ++, поэтому я хочу использовать код с этой страницы https://docs.microsoft.com/ru-ru/windows/uwp/packaging/self-install-package-updates и особенно метод
публичная асинхронная задача DownloadAndInstallAllUpdatesAsync ()
, который описан там, но мне не удалось преобразовать его в C ++. Я сделал что-то вроде этого:
.h
Windows::Services::Store::StoreContext^ context = nullptr;
Concurrency::task<Windows::Foundation::Collections::IVectorView<Windows::Services::Store::StorePackageUpdate ^> ^> updatesTask;
void DownloadAndInstallAllUpdatesAsync();
.cpp
void myApp::DownloadAndInstallAllUpdatesAsync()
{
if (context == nullptr)
context = StoreContext::GetDefault();
// Get the updates that are available.
updatesTask = create_task(context->GetAppAndOptionalStorePackageUpdatesAsync());
std::this_thread::sleep_for(std::chrono::seconds(2));
updatesTask.then([this](IVectorView<StorePackageUpdate^>^ const &update) {
if (update->Size > 0) {
// Download and install the updates.
IAsyncOperationWithProgress<StorePackageUpdateResult^, StorePackageUpdateStatus>^ downloadOperation =
context->RequestDownloadAndInstallStorePackageUpdatesAsync(update);
}
});
}
Но у меня есть две проблемы с этим кодом:
- Без выполнения sleep в течение двух секунд для потока. Я не всегда получаю ответ от асинхронного вызова context-> GetAppAndOptionalStorePackageUpdatesAsync ();
- После вызова context-> RequestDownloadAndInstallStorePackageUpdatesAsync (update); У меня появилось всплывающее окно с вопросом, хочу ли я загрузить обновление или я хочу отклонить эту операцию, и независимо от того, какой ответ я выбираю, приложение зависло ...
Заранее спасибо за помощь