Возможно, вы неправильно понимаете, как работает async/await
. Когда вы помечаете метод async
и он не содержит real await (что означает отсутствие операции ввода-вывода или операции, которая фактически выполняется в другом потоке), весь метод по существу будет выполняться синхронно. Это верно в вашем случае, так как вы упомянули, что внутри UpdateGrid
нет никакой асинхронной работы, поэтому код будет работать так, как если бы в действительности не было await
.
Поток пользовательского интерфейса будет занят все время с момента установки SyncLoadingImageVisible
на true
до момента, когда вы установите его обратно на false
- в течение этого времени поток пользовательского интерфейса на 100% посвящен выполнению вашего кода поэтому пользователь не увидит никаких изменений пользовательского интерфейса. Это вызывает поведение, которое вы наблюдаете - что существует задержка, поскольку поток пользовательского интерфейса не имеет возможности обновить пользовательский интерфейс, пока не завершится выполнение метода UpdateGrid
.
Чтобы решить эту проблему должным образом, вам придется перенести интенсивные, не связанные с пользовательским интерфейсом задачи в методе UpdateGrid
в другой поток, используя ожидаемый Task.Run
, и только пользовательский интерфейс, который действительно работает с пользовательским интерфейсом приложения, должен затем выполняться в пользовательском интерфейсе. нить. Таким образом вы освободите поток пользовательского интерфейса, чтобы иметь возможность отображать прогресс для пользователя, пока выполнение выполняется в фоновом режиме.