2012-05-05 10 views
54
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red; 
System.Threading.Thread.Sleep(1000); 

İ quiero esperar un segundo antes de imprimir las celdas de mi cuadrícula con este código, pero no está funcionando. ¿Que puedo hacer?Espere un segundo al ejecutar el programa

+0

¿Puede dar más contexto? –

+1

¿Qué código se supone que debe ejecutarse después de esperar 1 segundo? – Allensb

+1

¿Cómo sabes que no está funcionando? Intente dormir 10000 y vea si está funcionando. 1000 es muy corto para evaluar si está funcionando. – Missy

Respuesta

93

¿Está pausando, pero no ve su color rojo en la celda? Prueba esto:

dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red; 
dataGridView1.Refresh(); 
System.Threading.Thread.Sleep(1000); 
1

uso dataGridView1.Refresh(); :)

21

personalmente creo que es una aplicación Thread.Sleep pobres. Bloquea la interfaz de usuario, etc. Personalmente me gustan las implementaciones de temporizador, ya que espera y luego se dispara.

Uso: DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));

//Note Forms.Timer and Timer() have similar implementations. 

public static void DelayAction(int millisecond, Action action) 
{ 
    var timer = new DispatcherTimer(); 
    timer.Tick += delegate 

    { 
     action.Invoke(); 
     timer.Stop(); 
    }; 

    timer.Interval = TimeSpan.FromMilliseconds(millisecond); 
    timer.Start(); 
} 
-4

tratan Tal vez este código

void wait (int x){ 
     DateTime t = DateTime.Now; 
     DateTime tf = DateTime.Now.AddSeconds(x); 

     while (t < tf) 
     { 
      t = DateTime.Now; 
     } 
    } 
+3

Esta es una solución válida. Sin embargo, debe agregar una descripción de sus beneficios y daños, como mencionar que debido a que es una solución ocupada esperando, tomará tiempo de CPU. – Hosch250

+0

La solución más corta es la mejor solución –

1

espera Ocupado no será un inconveniente grave si es corta. En mi caso, hubo la necesidad de dar retroalimentación visual al usuario mediante el parpadeo de un control (es un control de gráfico que se puede copiar al portapapeles, que cambia su fondo durante algunos milisegundos). Funciona bien de esta manera:

using System.Threading; 
... 
Clipboard.SetImage(bm); // some code 
distribution_chart.BackColor = Color.Gray; 
Application.DoEvents(); // ensure repaint, may be not needed 
Thread.Sleep(50); 
distribution_chart.BackColor = Color.OldLace; 
.... 
Cuestiones relacionadas