c# - 如何使活动指示器等待功能
问题描述
我想使用活动指示器来显示我的功能正在加载。它运行得如此之快,以至于我可以看到我的活动指示器,但该功能尚未完成加载
问题:当函数真正完成运行时,如何使用使我的活动指示器为 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;
}
解决方案
按照您编写的方式,任务必须在页面显示之前完成它们的工作。所以页面(终于)显示了,但是由于工作已经完成,活动指示器立即消失了。
这些功能应该在页面显示后运行。
否则,在任务运行时,用户将看到一个空白屏幕(或在您开始创建此页面之前显示的任何页面)。
不幸的是,在第一次显示页面后没有运行跨平台事件。
这是在后台工作完成时让页面显示的一种方法:
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;
});
}
}
推荐阅读
- reactjs - 如何处理 CallBackURL?
- java - 如何在 Fragment 中创建 onClick
- machine-learning - 创建领域专业知识特征作为特征工程方法
- javascript - 使用 javascript 将多个文件上传到 S3 存储桶的问题
- python - 使用 Twint 时抓取推文
- amazon-web-services - 使用 flutter_apns 和 Mobile 进行 Flutter 通知:推送通知 (AWS SNS)
- groovy - Jira,Scriptrunner - 项目自动化中的 getCurrentUser
- github - 将公共 Github 存储库中的 .md 文件与
- firebase - 如何在 Firebase Cloud Messaging 中从应用程序内部向特定用户发送消息?
- postgresql - 如何列出 PostgreSQL 中所有表的所有约束?