我正在開發一個 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 關注
- 122 瀏覽
添加回答
舉報
0/150
提交
取消