【问题标题】:Windows Phone 8 navigation issue between pagesWindows Phone 8 页面之间的导航问题
【发布时间】:2013-09-18 22:41:58
【问题描述】:

我有一个带有登录进程的 Windows Phone 应用程序,该登录进程访问外部 API。 登录按钮的控制器最初运行了一些立即导航到仪表板页面的代码:

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

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

这很好用!

后来,我认为最好实现与 api 的实际连接,检查用户详细信息是否正确,然后重定向到仪表板。为简洁起见,我已经删除了 api 部分,但是假设这个函数作为 Action 委托 在各处被传递,然后在它的正确位置,即控制器中被调用。..

    ...
    // 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 类中加载导航失败方法的原因

【问题讨论】:

    标签: c# windows-phone-8 navigation


    【解决方案1】:

    您可以在导航失败事件的 NavigationFailedEventArgs 中获取更多详细信息(在 Exception 参数中)。

    最可能的原因是您尝试从非 ui 线程调用 Navigate。如果是这种情况,只需使用调度程序在 ui 线程上调度它:

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

    【讨论】:

    • 哇,成功了。谢谢。所以基本上,你不能只是说......改变页面,你必须确保一个新线程已经准备好并准备好为你做点什么?
    • 不,你只需要确保你是从 ui 线程而不是从后台线程调用的(就像你不能从后台线程更改任何 ui 组件属性一样)
    • Deployment.Current.Dispatcher.BeginInvoke 唯一要做的就是将请求发送回 ui 线程而不启动任何内容
    • 你使用了 HttpWebRequest 并且 HttpWebRequest 的回调在另一个线程上可能发生的事情(这样做是为了你不会阻塞 ui 并且 ui 保持响应)
    • 不错,有道理
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多