我正在开发一个 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();
}
}
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消