为什么整个方法完成后ActivityIndi​​cator会更改状态?

时间:2019-01-24 15:45:45

标签: xamarin.forms activity-indicator

我想在用户点击页面上的登录按钮后显示ActivityIndi​​cator对象。不幸的是,这样做有一个小问题,因为在整个方法完成之后,ActivityIndi​​cator似乎更改了状态。这是我到目前为止编写的代码:

.ReadyState

当我在private void Login(object sender, EventArgs ev) { BusyIndicator.IsVisible = true; //<- here I want to show indicator try { //some input validation, connection opening etc ConnectionHandler.OpenConnection(ServerIP, "dmg", false); } catch (Exception e) { Logging.Error(e.Message, "Connection", e); } } 之后设置断点时,应用程序绝对没有变化。但是我注意到当方法完成时会显示指示器。这是此控件的正确行为吗?

为什么我需要这个?因为现场验证和与服务器的连接需要一些时间,所以我需要向用户显示后台发生了一些事情。登录功能大约需要1秒钟的时间,因此指示器可以快速显示和隐藏,甚至看不到任何变化。

用户点击按钮后如何立即显示指示器?

1 个答案:

答案 0 :(得分:1)

您的问题是UI线程中正在执行Login()方法。因此,尽管设置了BusyIndicator.IsVisible = true;,线程仍继续执行该方法以获取数据,因此UI不会响应。

解决方案,在另一个线程中运行OpenConnection:

private async void Login(object sender, EventArgs ev)
{
    BusyIndicator.IsVisible = true; //<- here I want to show indicator

    try
    {
        //some input validation, connection opening etc


        await Task.Run(() => { ConnectionHandler.OpenConnection(ServerIP, "dmg", false);});
    }
    catch (Exception e)
    {
        Logging.Error(e.Message, "Connection", e);
    }
}