locked
GoBack() RRS feed

  • Общие обсуждения

  • Добрый день)  У меня есть проект.  У него есть две кнопки: одна открывается окно в котором, задается вопрос "точно оправить смс?" там есть две кнопки да и нет. При нажатии да открывает смс - менеджер. При нажатии на нет, должен переходить назад.(NavigationService.GoBack();) В эмуляторе все работает. На девайсе, приложение виснет, но музыка с основного экрана играет. И так сильно виснет ,что телефон приходиться выключать, чтобы что-то сделать. В чем может быть дело?

     private delegate void DisplayPromoEventDelegate();
            void m_d3dBackground_DisplayPromoEvent(int promoType)
            {
                if (promoType == 3)
                {
                    Dispatcher.BeginInvoke(new DisplayPromoEventDelegate(OnSendSms));
                }
                else if (promoType == 4)
                {
                    Dispatcher.BeginInvoke(new DisplayPromoEventDelegate(OnInputPassword));
                }
            }
            //-------------Вставка пароля
            void OnInputPassword()
            {
                
                NavigationService.Navigate(new Uri("/inputPass.xaml", UriKind.RelativeOrAbsolute));
            }
    
         
            //------------отправка смс
            void OnSendSms()
            {
                NavigationService.Navigate(new Uri("/agree.xaml", UriKind.RelativeOrAbsolute));
                
            }
    Вот это код,  в котором вызывают отправку смс


    19 ноября 2013 г. 13:25

Все ответы

  • Так во еще что. Если мы нажимаем отправить смс. Открывает смс менеджер. потом нажимаем назад, возвращаемся на окно с вопросом и кнопками "да" и "нет". Нажимаем "нет" или назад и все работает.

    Может быть можно как-то обойти с помощью этого?

    19 ноября 2013 г. 13:28
  • Пример проекта сбросить можете? С минимальным функционалом для тестирования именно этой части.
    19 ноября 2013 г. 13:41
  • Проект большой, нет возможности его сбросить, могу только  пару файлом. Но они не подойду для тестирования.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using Microsoft.Phone.Controls;
    using Microsoft.Phone.Shell;
    using Microsoft.Phone.Tasks;
    
    namespace PhoneDirect3DXamlAppInterop
    {
        public partial class agree : PhoneApplicationPage
        {
            public agree()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                SmsComposeTask smsComposeTask = new SmsComposeTask();
                smsComposeTask.To = "";
                smsComposeTask.Body = "";
                smsComposeTask.Show();
            }
            
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                NavigationService.GoBack();
            }
        }
    }
    Это оправка смс, а вызов его я уже приводил в примере
    19 ноября 2013 г. 13:58
  • Есть возможность проверить на другом девайсе?

    Просто я не вижу здесь ничего, что могло бы фризить приложение.


    19 ноября 2013 г. 14:45
  • да. Там такая же хрень. Больше всего интересно почему когда запускаем смс менеджер, кнопка назад начинает работать. МОжет быть можно запустит, что нибудь такое чтобы не было видно пользователю, и сразу несколько раз сделать назад? 
    19 ноября 2013 г. 14:59
  • 1. Проблема возникает только на этой странице?

    2. Попробуйте сделать GoBack так:

    App.RootFrame.GoBack()

    19 ноября 2013 г. 17:16
  • 1. На все страницах ,которые при нажатии на назад попадают на главную.

    2. Не принимает. Пишет

    Error 5 An object reference is required for the non-static field, method, or property 'PhoneDirect3DXamlAppInterop.App.RootFrame.get' ***\agree.xaml.cs 31 13 название_проета
    20 ноября 2013 г. 8:27
  • Сперва уточню насчет App.RootFrame.GoBack(), эта ошибка возникает, когда Вы пытаетесь вызвать экземплярный метод из статического.

    В общем, вот такое будет работать:

    private void Button_Click(object sender, RoutedEventArgs e)
            {
                App.RootFrame.GoBack();
            }

    Дальше, перейдем к Вашей проблеме, что вся навигация на главную страницу по бэку заканчивается зависанием.

    Что можно для начала сделать - переопределяете на главной странице методы OnNavigateTo и OnNavigateFrom, просто что бы в них BreakPoint поставить в дебаге. Зачем это нужно? Пытаемся отследить где оно зависает.

    Дальше, на той странице, на которой Вы делаете GoBack сработет метод OnNavigateFrom. Должен сработать, для уверенности поставьте в него брейкпоинт.
    Так же, после GoBack на главной странице помимо OnNavigateTo сработает еще и OnLoad на странице. Возможно в каком-то из этих методов у Вас и происходит зависание. Я код не видел и поэтому сложно сказать где оно виснет, но раз Вы говорите что постоянно на главной, то источник проблемы и есть эта страница. Нужно детально дебажить код.


    • Изменено Oleg Kurzov 20 ноября 2013 г. 9:03
    20 ноября 2013 г. 9:00
  • Я так и пробовал

    20 ноября 2013 г. 9:09
  • Так же задаюсь вопросом ,почему после использования смс менеджера, кнопка назад начинает работать. 
    20 ноября 2013 г. 9:12
  • Попробовал все как, сказали. На странице на которой нажимаем назад срабатывает OnNavigateFrom. На страницу на которую переходим полностью проходит OnNavitageTo. Фоновая музыка на нем играет с главное страницы.  Только на экране все также висит, прошлое окно.
    20 ноября 2013 г. 9:20