none
循环使用Frame.GoBack(),会导致System.UnauthorizedAccessException的异常 RRS feed

  • 问题

  • while (Global.RootFrame.CanGoBack)

    { Global.RootFrame.GoBack(); } await (Global.RootFrame.Content as Home).BindChangeCity(cityinfo);

    代码如上,想要回到首页,并且调用某个方法。我没用使用Frame.Navigate()方法,因为这个会有历史记录。

    所以想了使用上述方法,但有时候会抛出System.UnauthorizedAccessException,但也不是每次都会这样。

    求解!

    2012年9月19日 8:39

答案

  • 谢谢,是我疏忽了,是访问文件引发的异常。因为OnNavigatingFrom会写一次文件。导致While的时候,出现了问题。

    再请教,如果当前页是3级,4级页,回到首页用什么办法呢?如果直接Navigate到那个页会有History的?

    2012年10月8日 2:48
  • 记录你的导航深度,然后执行多次GoBack。其实你的代码也是 LayoutAwarePage.GoHome 的实现代码:

            /// <summary>
            /// Invoked as an event handler to navigate backward in the page's associated
            /// <see cref="Frame"/> until it reaches the top of the navigation stack.
            /// </summary>
            /// <param name="sender">Instance that triggered the event.</param>
            /// <param name="e">Event data describing the conditions that led to the event.</param>
            protected virtual void GoHome(object sender, RoutedEventArgs e)
            {
                // Use the navigation frame to return to the topmost page
                if (this.Frame != null)
                {
                    while (this.Frame.CanGoBack) this.Frame.GoBack();
                }
            }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月8日 8:45
    版主

全部回复

  • 未认证的访问异常。 这个肯定是你在Load Home 时候发生的,请在Home page 的OnNavigatedTo中断点 单步跟踪其异常。是否存在异步调用同步问题。 我单看你的代码,应该不会是简简单单的GoBack的问题。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年9月20日 4:20
    版主
  • 谢谢,是我疏忽了,是访问文件引发的异常。因为OnNavigatingFrom会写一次文件。导致While的时候,出现了问题。

    再请教,如果当前页是3级,4级页,回到首页用什么办法呢?如果直接Navigate到那个页会有History的?

    2012年10月8日 2:48
  • 记录你的导航深度,然后执行多次GoBack。其实你的代码也是 LayoutAwarePage.GoHome 的实现代码:

            /// <summary>
            /// Invoked as an event handler to navigate backward in the page's associated
            /// <see cref="Frame"/> until it reaches the top of the navigation stack.
            /// </summary>
            /// <param name="sender">Instance that triggered the event.</param>
            /// <param name="e">Event data describing the conditions that led to the event.</param>
            protected virtual void GoHome(object sender, RoutedEventArgs e)
            {
                // Use the navigation frame to return to the topmost page
                if (this.Frame != null)
                {
                    while (this.Frame.CanGoBack) this.Frame.GoBack();
                }
            }


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年10月8日 8:45
    版主