Windows Forms ProgressBar: самый простой способ запуска / остановки шатра?



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

1158   7  

7 ответов:

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

myProgressBar.Style = ProgressBarStyle.Marquee;

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

начать/остановить анимацию, вы должны сделать это:

Для начала:

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

остановить:

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

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

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

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();
        }
    }
}    

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

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

можно использовать таймер (система.Окна.Формы.Таймер.)

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

...так же, как проводник Windows: -)

Comments

    Ничего не найдено.