Без хорошего Минимального воспроизводимого примера , который надежно воспроизводит проблему, невозможно точно знать, в чем проблема. Тем не менее, можно сделать обоснованное предположение.
В Xamarin, как и во всех других основных GUI API, у вас есть один поток, которому принадлежит весь пользовательский интерфейс. Только этот поток обновляет экран, и пока этот поток занят другими вещами, он не может этого сделать. Изменения свойств визуальных элементов не отображаются пользователю.
Возможно, что код, который вы разместили, выполняется в этом основном потоке пользовательского интерфейса. Пока вы не вернетесь из любого метода, содержащего код, пользовательский интерфейс не может быть обновлен. Ваш собственный код занимает внимание потока, и пользовательский интерфейс не может быть обновлен.
Без примера кода, нет никакого способа дать конкретный c совет о том, как это исправить. Однако общий подход * включает перемещение трудоемкого кода в фоновый поток и последующее использование некоторого механизма для периодического обновления индикатора выполнения.
Обратите внимание, что, как и в других основных направлениях GUI API, также существует требование, чтобы ваш код взаимодействовал с объектами, связанными с пользовательским интерфейсом, только в этом основном потоке пользовательского интерфейса. Обычно такие API предоставляют специальные методы, и Xamarin не является исключением. Одним из методов, которые вы можете использовать, является InvokeOnMainThread()
. Вы можете найти это для получения более подробной информации о том, как его использовать.
Тем временем, вот еще один вопрос и ответ о переполнении стека, который иллюстрирует основные c концепции использования ProgressBar
: Как создать индикатор выполнения с закругленными углами в iOS с использованием Xamarin.Forms
В этом примере показан один из способов использования фонового потока для выполнения длительной работы (в этом случай, смоделированный с вызовом Task.Delay()
), а также как использовать InvokeOnMainThread()
для обновления самого ProgressBar
.