Каждый из вас пользуется программами, и наверняка в них вы видели своего рода индикатор, который позволяет видеть текущее состояние программы. Часто применяется в играх и программах которые занимают длительное время работы при загрузки. ProgressBar представляет собой индикатор, который наглядно показывает пользователю состояние протекания процесса. Компонент имеет ряд свойств.
Свойство Value, значение которого отображается в поле компонента в виде полосы, длина которого пропорционально значению свойства value.
1 |
progressBar1.Value = 20; |
Свойство Minimum Задает минимальное значение Value меньше чем минимальное значение вызывает исключение, по умолчанию 0
Свойство Maximum Задает максимальное значение Value привышения допустимого значения вызывает исключение, по умолчанию 100
Свойство Step Задает шаг изменения значения свойств value, по умолчанию 10, при использовании метода PerformStep, каждый ее вызов будет увеличивать значения value на шаг то есть на 10 по умолчанию, если значение value увеличиться до значения свойства Maximum по умолчанию которое равно 100 оно перестанет расти, а шкала отображения будет заполнена визуальным эффектом.
1 2 3 4 5 |
progressBar1.Minimum = 0; // по умолчанию progressBar1.Maximum = 100; //по умолчанию //progressBar1.Value =0; //по умолчанию progressBar1.Step = 10; //по умолчанию progressBar1.PerformStep(); //вызываем этот метод для увеличения шкалы progressBar |
Если у вас приложение состоит из множества методов, и это знимает некое время загрузки, то стоит задуматься над тем что бы разместить компонент progressBar, в приложении вам лишь достаточно вызывать метод progressBar1.PerformStep(); после каждого метода в приложении, таким образом значение value будет расти, и пользователь не подумает что ваша программа зависла.
Как изменять значения ProgressBar из другого потока?
Частыми вопросом является у новичков, как вернуть прогресс ProgressBar из другого потока. Для того что бы вернуть и изменить значения в ProgressBar из другого потока нам необходимо создать делегат и уже через него передавать значения. Выглядеть это будет так:
1 2 3 4 5 6 7 8 9 10 11 12 |
delegate void Progress(int value); void Main() { Thread t = new Thread(Start); t.Start(Start); } void Start() { progressBar1.Invoke(new Progress((s) => progressBar1.Value = s), progressBar1.Value + 25); } |