Pergunta

Eu estou usando C # e Windows Forms. Eu tenho uma multa normal de trabalho barra de progresso no programa, mas agora eu tenho uma outra operação em que a duração não pode ser facilmente calculado. Eu gostaria de exibir uma barra de progresso, mas não sei a melhor maneira de iniciar / parar a marquise de rolagem. Eu estava esperando por algo tão simples como a definição da velocidade marquise e depois ter um start () e stop (), mas não parece ser tão simples. Eu tenho que executar um loop vazio no fundo? Como faço para melhor fazer isso? Graças

Foi útil?

Solução

Use uma barra de progresso com o conjunto de estilo para Marquee. Isto representa uma barra de progresso indeterminado.

myProgressBar.Style = ProgressBarStyle.Marquee;

Você também pode usar o MarqueeAnimationSpeed propriedade para definir quanto tempo vai tomar o pequeno bloco de cor para animar toda a sua barra de progresso.

Outras dicas

Para iniciar / parar a animação, você deve fazer isso:

Para começar:

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

Para parar:

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

Não é como eles funcionam. Você "iniciar" uma barra de progresso estilo marquise, tornando-a visível, você pará-lo, escondê-lo. Você poderia alterar a propriedade Style.

Este código é parte de um formulário de login, onde os usuários esperar para o servidor de autenticação para responder.

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

Há uma boa artigo com código sobre esse tópico no MSDN . Estou assumindo que definir a propriedade Estilo para ProgressBarStyle.Marquee não é apropriado (ou isso é o que você está tentando controlar ?? - eu não acho que é possível iniciar / parar esta animação embora você pode controlar a velocidade como @ Paulo indica).

Muitas respostas boas aqui já, embora você também precisa ter em mente que se você está fazendo o processamento de longa duração no segmento interface do usuário (geralmente uma má idéia), então você não vai ver a marquise em movimento também.

Você pode usar um Temporizador (System.Windows.Forms.Timer).

Ligá-lo do evento Tick, antecipadamente, em seguida, barra de progresso até atingir o valor máximo. quando isso acontecer (acertar o max) e você não terminar o trabalho, redefinir o valor da barra de progresso de volta para o mínimo.

... assim como o Windows Explorer: -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top