【问题标题】:PopModalAsync in OnAppearing Xamarin.FormsOnAppearing Xamarin.Forms 中的 PopModalAsync
【发布时间】:2020-04-30 08:47:20
【问题描述】:

我正在开发一个 xamarin.forms 应用程序。

在开始播放视频之前,我必须在页面上检查互联网连接是否已打开,否则我会显示错误消息,然后我必须关闭页面

我写了这段代码,但它不起作用,显示弹出窗口,但在我按“确定”后 应用程序冻结,它不再工作

    private void ContentPage_Appearing(object sender, EventArgs e)
    {
        if (Connectivity.NetworkAccess != NetworkAccess.Internet)
        {
            DisplayAlert("WARNING!", "Error message!", "OK");
            Navigation.PopModalAsync();
        }
        else
        {

            //...

        }
    }

控制是在内容页面的OnAppearing 事件中完成的,这就是Navigation.PopModalAsync() 不起作用的原因吗?我该如何解决?

【问题讨论】:

  • 使用等待和异步
  • @ChetanRawat 我将异步放入方法并等待 DisplayAlert 但是当我按下确定时情况没有改变,页面没有关闭并且应用程序冻结
  • Visual Studio 通知我无法等待呼叫

标签: c# xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

您应该使用异步操作,因为DisplayAlertPopModalAsync 都返回一个任务。此外,您应该覆盖页面的 OnAppearing 方法并删除 Appearing 事件处理程序。

protected override async void OnAppearing()
{
    base.OnAppearing();
    if (Connectivity.NetworkAccess != NetworkAccess.Internet)
    {
        await DisplayAlert("WARNING!", "Error message!", "OK");
        await Navigation.PopModalAsync();
    }
    else
    {

        //...

    }
}

不建议再次使用async void,我建议使用 MVVM 并且不要直接在页面的代码隐藏中编写代码,但现在应该可以使用。

【讨论】:

  • 感谢您的回答,我试过了,但我得到了异常System.NullReferenceException
  • 感谢您的建议,作为一个小项目我暂时还没有实现 MVVM
  • 您的模态导航堆栈似乎存在问题。您的页面是否包含在 NavigationPage 中?
  • 连接和导航似乎没问题。我通过在主页上执行此操作 await Navigation.PushModalAsync(new PlayerPage(param)); 打开此内容页面
  • 它没有包含在 NavigationPage 中
猜你喜欢
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2021-03-24
  • 2022-09-23
相关资源
最近更新 更多