首页 > 解决方案 > 如何使活动指示器等待功能

问题描述

我想使用活动指示器来显示我的功能正在加载。它运行得如此之快,以至于我可以看到我的活动指示器,但该功能尚未完成加载

问题:当函数真正完成运行时,如何使用使我的活动指示器为 false

这是我的代码:

  public MainPage()
        {


            InitializeComponent();
            On<iOS>().SetUseSafeArea(true);

            activityIndicator.IsRunning = true;
         
            MyPageName = "home";


            var tasks = new List<Task>();

          
            tasks.Add(Task.Run(async () => {

            GetMyLeafLanguage(); //p


            }));


            tasks.Add(Task.Run(async () => {

                    if (App.CheckConnection() == true)
                    {
                        MyAds();  // doit être apres l'initialisation         //
                        LoadtestPage();
                    }
            }));



            Task.WhenAll(tasks);
            #endregion My Initial Tasks

             OnGoTutorial();


            MyNotificationActivate();

            activityIndicator.IsRunning = false;


        }

标签: c#xamarin.forms

解决方案


按照您编写的方式,任务必须在页面显示之前完成它们的工作。所以页面(终于)显示了,但是由于工作已经完成,活动指示器立即消失了。

这些功能应该在页面显示后运行。

否则,在任务运行时,用户将看到一个空白屏幕(或在您开始创建此页面之前显示的任何页面)。


不幸的是,在第一次显示页面后没有运行跨平台事件。

这是在后台工作完成时让页面显示的一种方法:

public partial class MyPage : ...
{
    protected override void OnAppearing()
    {
        base.OnAppearing();

        BeginWorkWithIndicator();
    }
    
    private void BeginWorkWithIndicator()
    {
        activityIndicator.IsRunning = true;

        // The delay gives Xamarin UI a little time, before your background work begins.
        // Without this delay, under some circumstances, the page might not show up as quickly.
        Device.StartTimer(TimeSpan.FromMilliseconds(100), () => {
            OneTimeBackgroundWork();
            // Run timer only once.
            return false;
        });
    }

    private void OneTimeBackgroundWork()
    {
        ... Long-running work - MUST NOT TOUCH UI ...
        
        // When done.
        Device.BeginInvokeOnMainThread(() => {
            // NOW MAKE UI CHANGES, based on variables set by work above.
            ...
            activityIndicator.IsRunning = false;
        });
    }
}

推荐阅读