progressbar - progress bar c# windows forms ejemplos
Windows Forms ProgressBar: ¿La forma más fácil de iniciar/detener la marquesina? (7)
Aquí ya hay muchas buenas respuestas, aunque también debes tener en cuenta que si estás procesando a largo plazo en el hilo de la IU (generalmente una mala idea), entonces tampoco verás mover la marquesina.
Estoy usando C # y Windows Forms. Tengo una barra de progreso normal que funciona bien en el programa, pero ahora tengo otra operación donde la duración no se puede calcular fácilmente. Me gustaría mostrar una barra de progreso pero no sé cuál es la mejor manera de iniciar / detener la marquesina de desplazamiento. Esperaba algo tan simple como configurar la velocidad de la marquesina y luego tener un inicio () y detener () pero no parece ser tan simple. ¿Tengo que ejecutar un bucle vacío en el fondo? ¿Cómo puedo hacer esto? Gracias
Este código es parte de un formulario de inicio de sesión donde los usuarios esperan que el servidor de autenticación responda.
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();
}
}
}
Hay un buen article con código sobre este tema en MSDN. Asumo que establecer la propiedad Style en ProgressBarStyle.Marquee no es apropiado (¿o es eso lo que estás tratando de controlar? No creo que sea posible detener / iniciar esta animación, aunque puedes controlar la velocidad como lo indica @Paul).
No es como funcionan. Usted "inicia" una barra de progreso estilo marquesina haciéndola visible, la detiene escondiéndola. Puede cambiar la propiedad de Estilo.
Para iniciar / detener la animación, debe hacer esto:
Para comenzar:
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 30;
Para detener:
progressBar1.Style = ProgressBarStyle.Continuous;
progressBar1.MarqueeAnimationSpeed = 0;
puede usar un Timer (System.Windows.Forms.Timer).
Enganche su evento Tick, avance y luego barra de progreso hasta que alcance el valor máximo. cuando lo haga (llegue al máximo) y no terminó el trabajo, restaure el valor de la barra de progreso al mínimo.
... como el Explorador de Windows :-)
Use una barra de progreso con el estilo establecido en Marquee
. Esto representa una barra de progreso indeterminada.
myProgressBar.Style = ProgressBarStyle.Marquee;
También puede usar la propiedad MarqueeAnimationSpeed
para establecer cuánto tiempo le tomará al pequeño bloque de color animar a través de su barra de progreso.