我的屏幕需要一些时间才能加载。我要做的就是在下一个屏幕加载之前显示一条简单的“正在加载”消息。我该如何实现?这是我目前正在尝试完成的代码:
void BT_User_Clicked(object sender, EventArgs e)
{
// Start a new task (this launches a new thread)
var t = Task.Run(() =>
{
// Do some work on a background thread, allowing the UI to remain responsive
Navigation.PushAsync(new UserList());
});
BT_User.IsEnabled = false;
BT_User.Text = "Now Loading";
}
运行此代码时,它几乎实现了我想要的。它显示“正在加载”文本,并在后台调用下一个屏幕(我只能通过在下一个屏幕的负载中设置断点来看到此内容)。问题是,下一个屏幕永远不会显示。我猜这是因为它是在后台线程上加载的,而不是在主UI线程上加载的。
答案 0 :(得分:1)
如果您从后台线程抛出一个新的Screen,它将无法正常工作。 UI的更改需要在主UI线程中完成。
但是Xamarin.Forms为您提供了一个助手:
在您的后台线程中只需调用:
var t = Task.Run(() =>
{
// Do some work on a background thread, allowing the UI to remain responsive
Xamarin.Forms.Device.BeginInvokeOnMainThread(() => {
Navigation.PushAsync(new UserList());
});
});
关于您的“加载”叠加层,如果您不想依赖第三方库,则需要一个能够处理弹出对话框的插件(例如Acr.UserDialogs),或者需要实现自己的对话框系统。 / p>
我已经完成了后者,并在此处简要说明了如何进行: Display a popup with xamarin forms