Остановка сбоя приложения WP7 при отсутствии сетевого подключения - PullRequest
0 голосов
/ 18 марта 2012

Я работаю над простым приложением WP7, которое отображает прибытия BART из их XML-канала в реальном времени. У меня эта часть работает, но мне нужно решить эту проблему, чтобы она была сертифицирована для Marketplace.

Когда я отлаживаю приложение на своем устройстве WP7 в режиме полета, когда я пытаюсь получить информацию XML, приложение вылетает.

Метод, который я нашел в сети для проверки сетевого подключения, похоже, помогает:

private bool InternetIsAvailable()
    {
        var available = !NetworkInterface.GetIsNetworkAvailable();
        #if DEBUG
        available = false;
        #endif
        if (!available)
        {
            MessageBox.Show("No internet connection is available.  Try again later.");
            return false;
        }
        return true;
    }

Код называется так (в том же коде, который вызывает метод, извлекающий XML, но прямо перед ним):

bool foo;
foo=InternetIsAvailable();
if (foo == false)
       {
           NavigationService.Navigate(new Uri("/map.xaml", UriKind.Relative));


       }

Здесь я думаю, что если нет доступа к сети, приложение вернется на предыдущую страницу до тех пор, пока не появится доступ к сети (а не crash-, а map.xaml - предыдущая страница). Тем не менее, приложение по-прежнему аварийно завершает работу после обнаружения отсутствия доступа к сети. Что я здесь не так делаю? Я также немного изучаю C # в то же время, так что я пропускаю какую-то обработку исключений?

Спасибо

1 Ответ

1 голос
/ 18 марта 2012

Не видя остальной части вашего кода, я не могу сказать, почему он выходит из строя, поэтому может быть много причин, которые не имеют ничего общего с доступом к сети.

Вызов GetIsNetworkAvailable правильный, но кодвокруг это немного сбивает с толку (используя отрицательное значение, затем сравнивая его, а затем возвращая значение).Множество негативных сравнений просто делают код немного менее читабельным.

Как вы тестируете систему, если нет доступной сети?На эмуляторе вы не можете сделать это.На реальном устройстве вы должны перевести телефон в режим полета.Недостаточно просто отключить сеть.

Также я хотел бы рассмотреть вопрос о том, чтобы этот метод ничего не делал, кроме как возвращал состояние сети и позволял другому объекту (вызывающей стороне) обрабатывать уведомление.Таким образом, вы можете использовать его везде, где вам нужно проверить, не привязывая себя к пользовательскому интерфейсу.

Последнее, что не нужно использовать Navigate, если вы хотите перенаправить пользователя.Это все еще будет поддерживать рост backstack.Если нет доступной сети, вероятно, лучше использовать NavigationService.GoBack (), которая эффективно возвращает пользователя на предыдущую страницу (так как он нажимает кнопку «Назад»).

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