В элементах управления WPF (например, сетке) мы обычно можем установить логическое свойство, показывающее, что элемент управления занят загрузкой данных, и в пользовательском интерфейсе это приведет к появлению индикатора «Загрузка ...».
Когдаиспользуя async
методы, мы просто должны убедиться, что мы поворачиваем IsBusy = "true"
перед вызовом метода и IsBusy="false"
после await
.
Однако в случае, когда я могу вызвать метод загрузки сетки несколько разпосле завершения первого вызова индикатор занятости будет выключен даже во время второго вызова.
Есть ли способ решить эту проблему?Я могу установить глобальный счетчик для хранения количества запросов и установить состояние индикатора на основе счетчика этой глобальной переменной, но это грязный подход, и он не будет масштабироваться, если в моем коде несколько асинхронных событий.
Пример сценария
На изображении ниже я могу искать имена учеников, и для каждого имени моя служба будет возвращать детали (оценки и т. Д.) И отображать их во второй сетке..
Я хочу показать индикатор занятости, пока вторая сетка ожидает данных (в противном случае пользователь может не знать, что программа делает что-либо).
При вводе имени следующий методназывается:
Представьте себе GetStudentResults
занимает 5 секунд (для каждого звонка).Я ввожу имя в 0 секунд, затем через 3 секунды я ввожу другое имя.Теперь через 5 секунд первый звонок возвращается, и он отключает индикатор занятости, в то время как детали второго имени не возвращаются.Вот чего я хочу избежать.
private async void SearchName(string name)
{
ResultDisplayGrid.IsBusy = true;
await GetStudentResults();
ResultDisplayGrid.IsBusy = false;
}
