无法在应用程序启动时显示警报 Xamarin Forms

我正在开发一个 Xamarin Forms 应用程序,我想在其中启动时执行一些操作。我想调用的方法的一部分负责检查是否满足某些条件,如果没有,我想显示一个警报(使用 DisplayAlert 方法)来通知用户他/她应该采取的操作,以便正确执行执行应用程序功能。不幸的是,在 Android 上,警报不会显示,它并不总是发生,有时会显示,但在大多数情况下不会显示。经过一些研究后,我认为该问题可能与线程有关。我添加了一些断点,我注意到在 Android 上,负责显示警报的代码行在页面变得可见之前被执行。在 iOS 上,一切正常(当显示大约一半的 UI 时,就会显示警报)。我尝试从主线程执行所有内容。在 Android 上它有部分帮助,警报在更多情况下正确显示,尽管我仍然没有达到 100% 的准确性。此外,在 iOS 上,提到的更改导致应用程序卡在启动屏幕上。下面是我尝试使用的代码的两个版本。


首先是我开始的基本代码:


    public partial class App : Application

    {

        MainPage mainPage;

        public static string DatabaseLocation = string.Empty;


        public App(string databaseLocation)

        {

            //All of the UI code is written in C# in MainPage initializer

            mainPage = new MainPage();

            MainPage = new NavigationPage(mainPage);

            DatabaseLocation = databaseLocation;

        }




        protected override async void OnStart()

        {

            base.OnStart();


            //in DoThings there is a code containing DisplayAlert

            await mainPage.DoThings();

        }

    }

下面是我尝试将所有内容都放在主线程上的代码版本:


public partial class App : Application

    {

        MainPage mainPage;

        public static string DatabaseLocation = string.Empty;


        public App(string databaseLocation)

        {

            Device.BeginInvokeOnMainThread(() =>

            {

                mainPage = new MainPage();

                MainPage = new NavigationPage(mainPage);

            });

            DatabaseLocation = databaseLocation;


        }




        protected override async void OnStart()

        {

            base.OnStart();


            Device.BeginInvokeOnMainThread(async () =>

            await mainPage.DoThings());

        }

    }

我还尝试从主线程运行专门负责显示警报的代码行,但它也没有帮助。DoThings 是 MainPage 中的一个方法。


public async Task DoThings() {


  if (somethingMissing()){

    Device.BeginInvokeOnMainThread(async () =>

      await DisplayAlert("Error", "Fix errors", "Ok"));

  }

  else

  {

    DoStuff();

  }

}


慕妹3242003
浏览 60回答 1
1回答

梵蒂冈之花

在主页中你可以尝试这个代码public async Task DoThings() {  if (somethingMissing()){    Device.BeginInvokeOnMainThread(async () =>      await App.Current.MainPage.DisplayAlert("Error", "Fix errors", "Ok"));  }  else  {    DoStuff();  }}
打开App,查看更多内容
随时随地看视频慕课网APP