在Xamarin.Forms的每个页面上执行相同的功能

时间:2018-07-23 05:30:23

标签: c# xamarin.forms

我有一个功能需要执行,以对出现的每个页面进行某种检查(例如: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());
    }
}

我不知道这是否是最佳实践(我想不是),但是无论如何它都不显示警报。
所以我的问题是在每个页面上执行函数的最佳方法是什么,为什么上面的代码不起作用。

1 个答案:

答案 0 :(得分:1)

您的代码似乎未在UI线程上运行。只需使用Device.BeginInvokeOnMainThread,请尝试如下操作

protected  override void OnAppearing()
{
    Device.BeginInvokeOnMainThread(() => {
        BaseClass.CheckForUpdate();
    });
}

希望它能对您有所帮助。