Приложение Windows Phone аварийно завершает работу при использовании NavigationService.GoBack() слишком рано
Даже если NavigationService.CanGoBack
возвращается True
, NavigationService.GoBack()
бросает мне эти исключения:
A first chance exception of type 'System.ArgumentException' occurred in System.Windows.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in
Это происходит систематически в двух случаях, в то время как третий работает нормально:
- Сбой, если я позвоню
NavigationService.GoBack()
вOnNavigatedTo()
- Сбои, если я позвоню
NavigationService.GoBack()
как результатWebException
бросили в мойHTTPWebRequest
когда Интернет недоступен [1] - Работает нормально, если интернет доступен и я звоню
NavigationService.GoBack()
когда мойHTTPWebRequest
получил результаты, проанализировал их и показал их.
Моя теория заключается в том, что я не могу позвонить GoBack()
слишком рано после перехода со страницы на другую... Мой вопрос: как программно вернуться обратно в стек навигации, когда HTTPWebRequest
не загружается?
Изменить: я решил сделать это по-другому, но я думаю, что мои проблемы могут быть связаны с анимацией навигации и инструментарием Windows Phone C# (я использую февраль 2011)
[1] Подробности моего кода по делу 2:
У меня простой HTTPWebRequest
, Мой обратный вызов делает это, и мое приложение падает в режиме полета. Линия NavigationService.GoBack()
несет ответственность, хотя NavigationService.CanGoBack
возвращается true
,
try
{
response = request.EndGetResponse(result);
}
catch (WebException)
{
Dispatcher.BeginInvoke(() =>
{
NavigationService.GoBack();
});
}
Я пытался с помощью Deployment.Current.Dispatcher.BeginInvoke()
также.
1 ответ
Вы можете попробовать использовать WebClient client = new WebClient();
затем используйте client.DownloadStringAsync(new Uri("request_url"));
чтобы сделать запрос и подписаться на client.DownloadStringCompleted
событие для получения ваших данных, когда запрос будет завершен. После анализа данных в обработчике событий вы можете вызвать NavigationService.GoBack();
или перейдите на любую страницу, которую вы хотите.
Кроме того, если вы пытаетесь сделать что-то в OnNavigatedTo
событие и столкнуться с проблемой, вы можете попробовать использовать OnNavigatingFrom
вместо этого (на предыдущей странице) отмените навигацию e.Cancel = true;
, сделайте свое дело, как в запросе и прочем, затем получите фрейм приложения и перейдите к e.Uri
(в основном продолжение навигации вы ранее отменили).
Хотя эта секунда может также представлять решение, я думаю, что первое лучше, поскольку оно выполняет всю асинхронную работу, таким образом не блокируя ваш поток пользовательского интерфейса. Это то, что я обычно использую в своих приложениях. Надеюсь, поможет.