Usuario
Cambiar el color de fondo de un label repetitivas veces

Pregunta
-
Hola a todos!
Estoy haciendo un contador con forms que llega a un determinado tiempo (5 segundos),uso un boton 'iniciar',un label-hora donde represento la salida del timer , quiero hacer parpadear el fondo del label cambiando de blanco a rojo, blanco-rojo. (como si fuera tipo semaforo). Mi duda es que no logro ver ese cambio de color a menos que dentro de la validacion del if ponga un mensaje de salida, ya intenté con Thread.Sleep() para que se espere segundos en cambiar y tampoco hace nada. Alguna idea de como hacerlo, todo lo demas funciona bien e incluso hasta cuando se detiene el timer. Este es el codigo
private void timer1_Tick(object sender, EventArgs e) { if (ini != DateTime.MinValue) { TimeSpan elapsed = DateTime.Now - ini; lblhora.Text = elapsed.ToString(@"mm\:ss"); if (lblhora.Text == "00:05") { timer1.Stop(); Boolean activo = true; for (int i = 0; i<= 5; i++){ if (activo) { lblhora.BackColor = Color.Red; activo = false; MessageBox.Show("Color rojo"); } else { lblhora.BackColor = Color.White; activo = true; MessageBox.Show("Color blanco"); } } } } }
Todas las respuestas
-
Hola Aventura01
Como se observa en public static void Sleep (int millisecondsTimeout);
https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.sleep?view=netframework-4.8
Necesitas ingresar la cantidad de milisegundos que deseas que se congele el hilo de ejecución principal y este método sólo funcionaria en el main(), en otro método tienes que generar un hilo por separado o detectar el Id de thread con el que se esta ejecutando dicho método para poder mandar la instrucción de pausar ese thread, entonces tendrías que usar la clase Thread();
Gracias por usar los foros de MSDN.Erick Rivera
____Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. -
Hola intenta con esto
el timer tiene el interval =1000
int i = 0; private void timer1_Tick(object sender, EventArgs e) { i++; label1.Text = DateTime.Now.ToLongTimeString(); if (i==5) { label1.BackColor = (label1.BackColor== Color.White) ? Color.Red : Color.White; i = 0; } }
es solo para el fondo y que aparesca la hora
- Editado Marti Llam domingo, 7 de julio de 2019 4:05