2013-09-18 5 views
1

У меня есть приложение для Windows-телефона с процессом входа в систему, при котором процесс входа в систему обращается к внешнему API. Контроллер для кнопки входа первоначально бежал некоторый код, который мгновенно можно перемещаться на страницу приборной панели:Проблема с Windows Phone 8 между страницами

private void LogInButton_Click(object sender, RoutedEventArgs e) 
    { 
     ... 

     App.RootFrame.Navigate(new Uri("/Interface.xaml", UriKind.RelativeOrAbsolute)); 
    } 

Это прекрасно работает!

Позже я подумал, что лучше всего реализовать фактическое соединение с api, проверьте правильность данных пользователя и переадресуйте его на панель управления. для краткости я вынули АНИ части, но, скажем, эта функция получает передается повсюду в качестве действий делегата до призыва в его законное место, контроллер ..

... 
    // This method is also located in the controller class, but it is called by another class 
    public void LoadDashboard(DataUpdateState data) 
    { 
     //data.AsyncResponse 
     App.RootFrame.Navigate(new Uri("/Interface.xaml", UriKind.RelativeOrAbsolute)); 
    } 

Дело в том, теперь метод навигации больше не работает, он запускает отладку на RootFrame_NavigationFailed.

Что я не понимаю здесь?

Есть ли способ выяснить, почему он зарядил навигацию не удался метод в классе App

ответ

2

Вы можете получить более подробную информацию в NavigationFailedEventArgs навигационного неудавшегося события (в параметре Exception).

Наиболее вероятная причина в том, что вы пытаетесь вызвать «Перемещение» из нити ui. Если это случай, просто используйте диспетчер для отправки его на нить ui:

Deployment.Current.Dispatcher.BeginInvoke(() => 
      { 
     App.RootFrame.Navigate(new Uri("/Interface.xaml", UriKind.RelativeOrAbsolute)); 

      }); 
+0

Ничего себе, это сработало. Благодарю. Таким образом, в принципе, вы не можете просто сказать ... изменить страницу, вы должны убедиться, что новый поток готов и предназначен для чего-то для вас? – Jimmyt1988

+0

Нет, вам просто нужно убедиться, что вы звоните из нити ui, а не из потока backgroud (это точно так же, как вы не можете изменить какое-либо свойство компонента ui из фонового потока) –

+0

Единственное, что Deployment.Current.Dispatcher.BeginInvoke do отправляет запрос обратно в нить ui, не запуская ничего –

Смежные вопросы