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

在用户请求完成之前,我需要在出现的每个页面上或以某种方式执行一些检查(例如:CheckForUpdate、CheckNetworkConnection、CheckUserAuthorization 等)。

所以我创建了 ac# 类并将其命名为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());

    }

}

我不知道这是否是最佳实践(我猜不是),但无论如何它都没有显示警报。

所以我的问题是在每个页面上执行函数的最佳方式是什么,为什么上面的代码不起作用。


陪伴而非守候
浏览 153回答 1
1回答

潇潇雨雨

您的代码似乎没有在 UI 线程上运行。只需使用Device.BeginInvokeOnMainThread,尝试如下protected  override void OnAppearing(){    Device.BeginInvokeOnMainThread(() => {        BaseClass.CheckForUpdate();    });}希望对你有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP