Использование StoreContext.CanSilentlyDownloadStorePackageUpdates при отключении сети приведет к сбою приложения. - PullRequest
0 голосов
/ 09 июля 2020

Как ни странно, try catch не может поймать это исключение, поэтому я не знаю, что делать.

Фрагмент кода:

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptions]
public bool CanSilentlyUpdate()
{
    try
    {
        // Disable the network before executing this method, and an exception is thrown:
        //     System.AccessViolationException :“Attempted to read or write protected memory. 
        //     This is often an indication that other memory is corrupt.”
        // Then the app crashes
        return StoreContext.GetDefault().CanSilentlyDownloadStorePackageUpdates;
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
        return false;
    }
}

Журнал ошибок в средстве просмотра событий:

Приложение: MyApp.exe Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Информация об исключении: System.AccessViolationException в Windows .Services.Store.StoreContext.get_CanSilentlyDownloadStorePackageUpdates ()

Я знаю, что могу определить, звонить ли StoreContext.CanSilentlyDownloadStorePackageUpdatesby, оценивая состояние сети, но когда я использую StoreContext.TrySilentDownloadStorePackageUpdatesAsync для обновления приложения, если сеть отключена во время процесса обновления, приложение все равно будет cra sh.

Я думаю, что это такая же проблема, поэтому я надеюсь, что может быть лучший способ решить эту проблему.

1 Ответ

1 голос
/ 13 июля 2020

После обсуждения с инженерами был сделан вывод, что в настоящее время исключение в фоновом режиме, созданное StoreContext.TrySilentDownloadStorePackageUpdatesAsync, не может быть обнаружено в потоке пользовательского интерфейса.

В настоящее время рекомендуется проверить сеть доступность перед выполнением этого метода ( NetworkInformation.NetworkStatusChanged ). Когда состояние сети изменяется, пользователю требуется выполнить загрузку снова. Или используйте метод RequestDownloadStorePackageUpdatesAsyn c, расположенный в потоке пользовательского интерфейса, для выполнения запроса на загрузку.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...