Почему ActivityIndicator изменяет состояние после завершения всего метода?

Я хотел бы показать объект 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);
    }
}

Когда я устанавливаю точку останова после BusyIndicator.IsVisible = true; в приложении нет абсолютно никаких изменений. Однако я заметил, что когда метод завершен, индикатор отображается. Это правильное поведение этого элемента управления?

Зачем мне это нужно? Потому что проверка поля и соединение с сервером занимает некоторое время, и мне нужно показать пользователю, что что-то происходит в фоновом режиме. Функция входа занимает ~1 сек, поэтому индикатор быстро отображается и скрывается, и я даже не вижу изменений.

Как я могу показать индикатор сразу после нажатия пользователем кнопки?

1 ответ

Решение

Ваша проблема в том, что метод 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);
    }
}
Другие вопросы по тегам