我有一个奇怪的问题,在代码后面覆盖BackkeyPress函数,在函数内部我有一个简单的消息框来返回或取消导航(保留在当前页面中),当没有选择时(确定或取消)和Messagebox是打开很长时间,应用程序崩溃,当我尝试调试时,没有异常被抛出并且App仍然处于状态,除非按下OK或取消,但是在正常运行(没有调试器)时崩溃是显而易见的。
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
string caption = "exit?";
string message = "Do you still want to exit?";
e.Cancel = MessageBoxResult.Cancel == MessageBox.Show(message, caption,
MessageBoxButton.OKCancel);
base.OnBackKeyPress(e);
}
答案 0 :(得分:4)
http://msdn.microsoft.com/en-US/library/windowsphone/develop/jj206947(v=vs.105).aspx
在Windows Phone 8中,如果您调用Show in OnBackKeyPress(CancelEventArgs)或BackKeyPress的处理程序 活动,应用程序将退出。
您可以通过在另一个线程上调用Show来解决此问题 在以下步骤中描述。覆盖BackKeyPress或创建一个 BackKeyPress事件的处理程序。将取消设置为true以取消 后退键按下动作。发送一个显示该方法的方法 消息框。如果用户选择离开应用程序,请调用Terminate(), 否则,什么都不做。
答案 1 :(得分:0)
我找到了另外一个解决方案,所以我认为如果我在这里发布它会更好。这只是一种解决方法。
private async void PhoneApplicationPage_BackKeyPress (object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true;
await Task.Delay(100);
if (MessageBox.Show(msg, cap, MessageBoxButton.OKCancel) == MssageBoxResult.OK)
{
//somecode
}
}
答案 2 :(得分:-1)
使用Terminate()时 - 请注意,与正常退出关联的一些app.xaml.cs rootFrame导航事件不会触发,也不会触发ApplicationClosing或您的页面的OnNavigatedFrom。因此,检查是否有任何重要事项。你可以在终止之前解决这个问题......