我有一个功能需要执行,以对出现的每个页面进行某种检查(例如:CheckForUpdate,CheckNetworkConnection,CheckUserAuthorization等),或者以某种方式在用户请求完成之前进行检查。
所以我做了一个c#类,并将其命名为 BasePage.cs :
public static class BasePage
{
public static async void CheckForUpdate()
{
// actual codes to check for updates are not included here
// just a sample alert
await App.Current.MainPage.DisplayAlert("Update", "There is a new version avaiable to update, would you like to download?", "Download", "Skip");
}
}
并在我的页面中使用它,如下所示:
LoginPage.cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class LoginPage : ContentPage
{
public LoginPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
await Task.Run(() => BasePage.CheckForUpdate());
}
}
我不知道这是否是最佳实践(我想不是),但是无论如何它都不显示警报。
所以我的问题是在每个页面上执行函数的最佳方法是什么,为什么上面的代码不起作用。
答案 0 :(得分:1)
您的代码似乎未在UI线程上运行。只需使用Device.BeginInvokeOnMainThread
,请尝试如下操作
protected override void OnAppearing()
{
Device.BeginInvokeOnMainThread(() => {
BaseClass.CheckForUpdate();
});
}
希望它能对您有所帮助。