用户可以在等待的DisplayAlert

时间:2018-10-04 00:39:13

标签: xamarin.forms async-await

很抱歉,这听起来像是一个愚蠢的问题,但我很好奇。

说我有这个:

async void buttonTapped(object sender, EventArgs e)
{
    var sure = await DisplayAlert("Confirm", "Are you sure?", "Ok", "Cancel");
    // Can the user navigate away before execution gets to this point?
}

我对async/await的理解是,一旦按下await,UI就会响应。因此,从理论上讲,警报显示为 as ,用户实际上可以点击返回按钮,然后返回上一页?

还是我弄错了?

2 个答案:

答案 0 :(得分:0)

据我所知,当您有DisplayAlert处于等待状态时,它正在等待您的响应。当您点击“后退”按钮时,DisplayAkert的响应为null(在您的情况下,sure参数值为null),您也只是关闭了警报, 就这样。如果您想从当前页面返回上一页,您将其称为DisplayAlert,我认为您需要创建自定义提醒,例如PopupPage

答案 1 :(得分:0)

async/await不能使UI响应。它只是告诉代码在该点等待所等待的方法完成。

例如:

async void SomeMethod()
{
    // Do some stuff

    await Task.Delay(1000);
    Task.Delay(1000);

    // Do more stuff
}

在上述方法中,代码将执行一些操作,然后阻塞,直到完成 first Task.Delay。然后,它将继续做更多的事情。

如果您没有await(与 second Task.Delay一样,则代码将继续执行而无需等待 second Task.Delay完成。实际上,您应该收到警告。上述方法等待的总时间为 1秒,因为只有 first 等待Task.Delay方法。


关于对话框显示时导航离开的问题,是的,完全有可能。如果用户要在对话框显示之前快速单击后退按钮,它将导航到上一页并显示该对话框(除非后退按钮关闭了应用程序,在这种情况下该对话框不会显示)。