为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕妹3242003 2023-09-16 17:16:51
我正在开发一个 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();  }}
查看完整描述

1 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

在主页中你可以尝试这个代码


public async Task DoThings() {


  if (somethingMissing()){

    Device.BeginInvokeOnMainThread(async () =>

      await App.Current.MainPage.DisplayAlert("Error", "Fix errors", "Ok"));

  }

  else

  {

    DoStuff();

  }

}


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 55 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信