2012-11-16 5 views
0

Windows Phone 7/8 응용 프로그램의 응용 프로그램 닫기/비활성화 메서드에 MessageBox가 표시됩니다. 앱이 종료되어 활성 타이머가 사용 중지되고 있음을 사용자에게 경고하는 데 사용됩니다. 모든 응용 프로그램 페이지에 논리를 두는 것은 너무 많은 페이지와 경로를 탐색하기 때문에 App Closing/Deactivated 이벤트가 완벽합니다. 이것은 잘 작동합니다 - 메시지 상자는 WP7에서 OK를 표시합니다.MessageBox.Show 응용 프로그램 닫기/비활성화 된 이벤트

나는 또한 breaking changes in the API of WP8을 알고 있습니다. MessageBox.Show가 Activated 및 Launching에서 예외를 일으킬 것이라는 점은 분명합니다.

문제는 WP8에서 메시지 상자가 앱 닫기에 표시되지 않는다는 것입니다. 코드는 예외없이 실행되지만 메시지는 표시되지 않습니다.

P. MS WP Dev 포럼에서이 질문을했지만 분명히 아무도 몰랐습니다.

답변

1

앱 닫기 이벤트에서 메인 페이지 코드 숨김으로 msgBox 코드를 이동하십시오. on back 키 누름 이벤트를 무시하고 코드를 배치하십시오. 이것은이 7.x의에서 수행 한 방법입니다 참고로

protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
     { 
      if (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel) 
      { 
       // Cancel default navigation 
       e.Cancel = true; 
      } 
     } 

- 새 스레드에있는 MsgBox 표시를 파견해야처럼 WP8에 보이는.

앱이 이벤트 모델에서 실제로 닫히기 전에 사용자에게 묻습니다. 사용자가 뒤로 키를 수락하면 press가 허용되고 그렇지 않으면 취소됩니다. 홈 버튼 누르기를 무시할 수 없으며 항상 홈 화면으로 즉시 이동해야합니다. 일시 중지/다시 시작을 통해 타이머 코드를 유지하려면 백그라운드 에이전트를 조사해야합니다.

+0

OnBackKeyPress는 여전히 페이지 메서드입니다. 따라서 10 개 이상의 페이지에서 구현하고 유지해야합니다. 더 나쁜 것은 빠른 전환을 해결하지 못합니다 - 뒤로가 눌러지지 않았습니다. :) – Kamen

+0

여전히 App.xaml.cs에서이 작업을 수행 할 수 있습니다. RootFrame의 탐색 이벤트에 연결하여 위의 코드를 트리거합니다 (CanGoBack이 거짓 임) – dotMorten

+0

물론, Inkog는 * 변경 사항 * 링크를 읽지 않아도되므로 코드가 응용 프로그램을 크래시 할 것임을 알지 못합니다. 'e.Cancel = true; '를 설정 한 후 * MessageBox.Show' 호출을 * 발송해야합니다! –

0

RootFrame에 BackKeyPress 이벤트를 등록하십시오.

RootFrame.BackKeyPress += BackKeyPressed; 
private void BackKeyPressed(object sender, CancelEventArgs e) 
    { 
     var result = (MessageBox.Show("Do you want to exit XXXXX?", "Application Closing", MessageBoxButton.OKCancel)); 
     if (result == MessageBoxResult.Cancel) 
     { 
      // Cancel default navigation 
      e.Cancel = true; 
     } 
} 
관련 문제