Я использую C # и Windows Forms. У меня в программе нормально работает индикатор выполнения, но теперь у меня есть еще одна операция, продолжительность которой не может быть легко рассчитана. Я хотел бы отобразить индикатор выполнения, но не знаю, как лучше всего запустить / остановить бегущую строку. Я надеялся на что-то простое, например, на установку скорости выделения, а затем на start () и stop (), но, похоже, это не так просто. Должен ли я запускать пустой цикл в фоновом режиме? Как мне лучше всего это сделать? благодаря
c#
winforms
progress-bar
Марк Сталер
источник
источник
Ответы:
Используйте индикатор выполнения со стилем, установленным на
Marquee
. Это представляет собой неопределенный индикатор выполнения.Вы также можете использовать это
MarqueeAnimationSpeed
свойство, чтобы установить, сколько времени потребуется маленькому цветному блоку для анимации на вашем индикаторе выполнения.источник
Marquee
визуализация не будет. Для включения использованияApplication.EnableVisualStyles();
Чтобы запустить / остановить анимацию, необходимо сделать следующее:
Начать:
progressBar1.Style = ProgressBarStyle.Marquee; progressBar1.MarqueeAnimationSpeed = 30;
Остановиться:
progressBar1.Style = ProgressBarStyle.Continuous; progressBar1.MarqueeAnimationSpeed = 0;
источник
MarqueeAnimationSpeed
при его остановке, и при запуске он обычно имеет разумное значение. Не нужно устанавливать его каждый раз при запуске.Они работают не так. Вы «запускаете» индикатор выполнения в стиле выделения, делая его видимым, вы останавливаете его, скрывая. Вы можете изменить свойство Style.
источник
Этот код является частью формы входа в систему, где пользователи ждут ответа сервера аутентификации.
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.Marquee не подходит (или это то, что вы пытаетесь контролировать? - Я не думаю, что можно остановить / запустить эту анимацию, хотя вы можете контролировать скорость как указывает @Paul).
источник
Здесь уже много хороших ответов, хотя вам также нужно иметь в виду, что если вы выполняете длительную обработку в потоке пользовательского интерфейса (как правило, плохая идея), вы также не увидите перемещения выделения.
источник
вы можете использовать таймер (System.Windows.Forms.Timer).
Перехватите это событие Tick, продвиньтесь, затем индикатор выполнения, пока не достигнет максимального значения. когда это произойдет (достигнет максимума) и вы не закончили задание, сбросьте значение индикатора выполнения до минимального.
... как в проводнике Windows :-)
источник