Windows Forms ProgressBar: Самый простой способ запустить/остановить выделение?

Я использую С# и Windows Forms. У меня нормальный индикатор выполнения, отлично работающий в программе, но теперь у меня есть другая операция, когда продолжительность не может быть легко рассчитана. Я бы хотел отобразить индикатор выполнения, но не знаю, как начать/остановить прокрутку. Я надеялся на что-то столь же простое, как установка скорости выделения, а затем запуск() и stop(), но это не так просто. Должен ли я запускать пустой цикл в фоновом режиме? Как мне лучше всего это сделать? Благодаря

Ответ 1

Используйте индикатор выполнения со стилем, установленным на Marquee. Это представляет собой неопределенный индикатор выполнения.

myProgressBar.Style = ProgressBarStyle.Marquee;

Вы также можете использовать свойство MarqueeAnimationSpeed, чтобы установить, сколько времени потребуется, чтобы маленький блок цвета отображался на вашем индикаторе выполнения.

Ответ 2

Чтобы запустить/остановить анимацию, вы должны сделать следующее:

Чтобы начать:

progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;

Чтобы остановить:

progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;

Ответ 3

Это не так, как они работают. Вы "начинаете" индикатор хода шага, делая его видимым, вы останавливаете его, скрывая его. Вы можете изменить свойство Style.

Ответ 4

Этот код является частью формы входа, где пользователи ждут ответа сервера аутентификации.

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;

namespace LoginWithProgressBar
{
    public partial class TheForm : Form
    {
        // BackgroundWorker object deals with the long running task
        private readonly BackgroundWorker _bw = new BackgroundWorker();

        public TheForm()
        {
            InitializeComponent();

            // set MarqueeAnimationSpeed
            progressBar.MarqueeAnimationSpeed = 30;

            // set Visible false before you start long running task
            progressBar.Visible = false;

            _bw.DoWork += Login;
            _bw.RunWorkerCompleted += BwRunWorkerCompleted;
        }

        private void BwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // hide the progress bar when the long running process finishes
            progressBar.Hide();
        }

        private static void Login(object sender, DoWorkEventArgs doWorkEventArgs)
        {
            // emulate long (3 seconds) running task
            Thread.Sleep(3000);
        }

        private void ButtonLoginClick(object sender, EventArgs e)
        {
            // show the progress bar when the associated event fires (here, a button click)
            progressBar.Show();

            // start the long running task async
            _bw.RunWorkerAsync();
        }
    }
}    

Ответ 5

Там есть хорошая статья с кодом по этой теме в MSDN. Я предполагаю, что установка свойства Style в ProgressBarStyle.Marquee не подходит (или это то, что вы пытаетесь контролировать?) Я не думаю, что можно остановить/запустить эту анимацию, хотя вы можете контролировать скорость как указывает @Paul).

Ответ 6

Здесь много хороших ответов, хотя вам также нужно помнить, что если вы выполняете длительную обработку потока пользовательского интерфейса (как правило, плохую идею), то вы не увидите перемещение шага.

Ответ 7

вы можете использовать Timer (System.Windows.Forms.Timer).

Прикрепите его к событию "Tick", продвигайтесь вперед, пока индикатор не достигнет максимального значения. когда это произойдет (нажмите max), и вы не закончили работу, reset значение индикатора выполнения вернется к минимуму.

... как и проводник Windows: -)