Xamarin.forms 为什么ActivityIndicator在整个方法完成后更改状态?

Xamarin.forms 为什么ActivityIndicator在整个方法完成后更改状态?,xamarin.forms,activity-indicator,Xamarin.forms,Activity Indicator,我想在用户点击页面上的登录按钮后显示ActivityIndicator对象。不幸的是,这样做有一个小问题,因为在整个方法完成之后,ActivityIndicator似乎改变了状态。这是我到目前为止写的代码: private void Login(object sender, EventArgs ev) { BusyIndicator.IsVisible = true; //<- here I want to show indicator try {

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

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);
    }
}
private void登录(对象发送方,事件参数ev)
{
BusyIndicator.IsVisible=true;//您的问题是,用户界面线程中正在执行Login()方法。因此,尽管设置了
BusyIndicator.IsVisible=true;
,线程仍会继续执行该方法以获取数据,因此用户界面不会响应

解决方案,在不同的线程中运行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);
    }
}
private async void登录(对象发送方,EventArgs ev)
{
BusyIndicator.IsVisible=true;/{ConnectionHandler.OpenConnection(ServerIP,“dmg”,false);});
}
捕获(例外e)
{
记录错误(如消息“连接”,e);
}
}