Управление ProgressBar параллельно с методом - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь запустить ProgressBar, когда метод запускается, и остановить бар, когда метод заканчивается.

Время ProgressBar должно идти параллельно со временем метод. Когда я вызываю метод, ProgressBar start ; when the method ends the ProgressBar` останавливается.

Я пытался:

progressBar1.Minimum = 0;
progressBar1.Maximum = 200;
int i = 0;
var myVar = var.empty;
While(myVar.Lenght =! 0)
{
   myVar = myMethod();
   i++;
   progressBar1.Value = i;
}

Есть какие-нибудь предложения, чтобы он работал?

1 Ответ

0 голосов
/ 12 апреля 2020

Без хорошего Минимального воспроизводимого примера , который надежно воспроизводит проблему, невозможно точно знать, в чем проблема. Тем не менее, можно сделать обоснованное предположение.

В Xamarin, как и во всех других основных GUI API, у вас есть один поток, которому принадлежит весь пользовательский интерфейс. Только этот поток обновляет экран, и пока этот поток занят другими вещами, он не может этого сделать. Изменения свойств визуальных элементов не отображаются пользователю.

Возможно, что код, который вы разместили, выполняется в этом основном потоке пользовательского интерфейса. Пока вы не вернетесь из любого метода, содержащего код, пользовательский интерфейс не может быть обновлен. Ваш собственный код занимает внимание потока, и пользовательский интерфейс не может быть обновлен.

Без примера кода, нет никакого способа дать конкретный c совет о том, как это исправить. Однако общий подход * включает перемещение трудоемкого кода в фоновый поток и последующее использование некоторого механизма для периодического обновления индикатора выполнения.

Обратите внимание, что, как и в других основных направлениях GUI API, также существует требование, чтобы ваш код взаимодействовал с объектами, связанными с пользовательским интерфейсом, только в этом основном потоке пользовательского интерфейса. Обычно такие API предоставляют специальные методы, и Xamarin не является исключением. Одним из методов, которые вы можете использовать, является InvokeOnMainThread(). Вы можете найти это для получения более подробной информации о том, как его использовать.

Тем временем, вот еще один вопрос и ответ о переполнении стека, который иллюстрирует основные c концепции использования ProgressBar: Как создать индикатор выполнения с закругленными углами в iOS с использованием Xamarin.Forms

В этом примере показан один из способов использования фонового потока для выполнения длительной работы (в этом случай, смоделированный с вызовом Task.Delay()), а также как использовать InvokeOnMainThread() для обновления самого ProgressBar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...