使用NavigationHelper挂起时,使用通用应用程序显示提示?

时间:2015-07-05 05:00:54

标签: c# windows-phone-8.1 win-universal-app winrt-async

我在Universal App中使用NavigationHelper类,并且我在应用程序级别启用了BackPressed事件

#if WINDOWS_PHONE_APP
    private async void HardwareButtons_BackPressed(object sender,
    Windows.Phone.UI.Input.BackPressedEventArgs e)
    {
     ...
    }
#endif

在我的HardwareButtons_BackPressed事件中,我想通过调用以下代码提示用户他们是否确定要退出应用程序:

UICommand ans = await this.GetLocatorViewModel.
DialogService.ShowMessagePrompt("Are you sure you want to quit?");

//NOTE: The validation below is not the complete code as I've removed
//the usage of my Enum for testing purpose but I would check the 
//ans.Id
if (!object.ReferenceEquals(ans, null))
{
  e.Handled = true;
}

我正在使用标准异步方法来显示提示,其定义如下:

    public async Task<Object> ShowMessagePrompt(string content)
    {
        MessageDialog msgbox = new MessageDialog(content);

        msgbox.Commands.Clear();
        msgbox.Commands.Add(new UICommand { Label = "Yes", Id = 0 });
        msgbox.Commands.Add(new UICommand { Label = "No", Id = 1 });

        return await msgbox.ShowAsync();
    }

如果我使用上面的代码,因为它是异步从NavigationHelper类调用的,它继续使用代码并仍然关闭应用程序。

如果我使用msgbox.ShowAsync()。结果:

object ans = this.GetLocatorViewModel.DialogService.ShowMessagePrompt(“你确定要退出吗?”)。结果;

它显示提示确定,但是一旦我点击是或否,它会关闭提示但它会导致我的应用程序挂起并且任何代码都没有被执行,即检查提示的结果等... < / p>

知道如何解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:1)

在显示消息对话框之前,将e.Handle设置为true。