Windows Phone 72012. 2. 16. 17:12

코레일 만드는도중 앱이 꺼졌다 이유를 보니

MessageBox가 띄워져 있는 상태에서  ok를 누르면 프로세서를 타고

cancel을 누르면 navivation.goback()을 하게 되어 잇는데

메세지 박스가 띄워져 있는 상태에서 tombtone을 하게 되면

cancel 된 분기문으로 가게 되어 있는데

거기에서 navigation.goback()부분에서 에러가 나는거였다.

그래서 혹시 goback()을 하기전에 이걸 체크하는게 있나 싶었는데 없었다. cangoback이거는 딴조건인듯

해결법은

bool _isTombstone; //톰스톤인지 아닌지 구분

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
      {
          base.OnNavigatedFrom(e);
          _isTombstone = true;
      }
 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
      {
          base.OnNavigatedTo(e);
          _isTombstone = false;

       }

if (MessageBox.Show(msg, string.Empty, MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                    {
                        XmlGroupManager xgmInside = new XmlGroupManager();
                        xgmInside.GetData(um.GetReserveCancelUrl(StaticManager.JrnyInfoModelSelectedItem));
                        xgmInside.xdmCE.CompleteGroupDataEvent += new EventHandler<Events.XmlGroupDataEventArgs>(xdmCE_CompleteGroupDataEvent);
                        xgmInside.xdmCE.errorEvent += new EventHandler<Events.XmlDataEventArgs>(xdmCE_errorEvent);
                    }
                    else
                    {
                        if (_isTombstone == false)
                        {
                            (Application.Current.RootVisual as PhoneApplicationFrame).GoBack();
                        }
                    }

 

이런식으로 해결했다. NavigatedFrom할때 이것이 톰스톤인지 아닌지를 구분해서 goback을 할지 안할지를 구분했다

 

그리고 만약 저런식이 아닌

 

if (e.Error != null)
            {
                (Application.Current.RootVisual as PhoneApplicationFrame).GoBack();
                MessageBox.Show("네트워크를 확인해 주세요.");
                return;
            }

메세지 박스를 띄운후 goback은 절대 하지 말고

먼저 뒤로 가고 메세지 박스를 띄우는게 낫다.

Posted by 동동(이재동)