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