WP7“Navigation is not allowed when the task is not in the foreground.”解決方案

l_serein發表於2013-02-01

今天在做一個專案的時候,遇到了“Navigation is not allowed when the task is not in the foreground.”這個錯誤,原因是我在main頁面中呼叫了PhotoChooserTask選擇器,應用程式失去啟用狀態,控制權由照片選擇器接管,但是我在Completed事件處理函式中,想直接跳轉頁面,並把選擇的照片傳給新頁面,程式碼如下:

        void photoTask_Completed(object sender, PhotoResult e)
        {
            if(e.TaskResult == TaskResult.OK )
            {
                 NavigationService.Navigate(new Uri("/PuzzlePage.xaml?type="+e.ChosenPhoto, UriKind.Relative));
            }

        }

這時候,就報題目中所示錯誤了,本能反應是開啟一個新的執行緒,或把跳轉程式碼封裝一個方法,再用DispatcherTimer控制方法的執行時機,但是,感覺執行效率都太差。

上網查了一下,最終成功解決,其最終解決方案就是:註冊Navigated事件,也就是將導航的時間向後推移,這樣,當我們導航時,我們的應用程式已從照片選擇器中成功接管了控制權。程式碼如下:

        void photoTask_Completed(object sender, PhotoResult e)
        {
            if(e.TaskResult == TaskResult.OK )
            {
                NavigationService.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);
            }
        }


        void NavigationService_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            NavigationService.Navigate(new Uri("/PuzzlePage.xaml?“, UriKind.Relative));
            NavigationService.Navigated -= new System.Windows.Navigation.NavigatedEventHandler(NavigationService_Navigated);  //執行完畢後,取消該事件,以免重複註冊
        }


相關文章