dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
System.Threading.Thread.Sleep(1000);
Je veux attendre une seconde avant d’imprimer mes cellules de grille avec ce code, mais cela ne fonctionne pas. Que puis-je faire?
Est-ce une pause, mais vous ne voyez pas votre couleur rouge apparaître dans la cellule? Essaye ça:
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
dataGridView1.Refresh();
System.Threading.Thread.Sleep(1000);
Personnellement, je pense que Thread.Sleep
est une mauvaise implémentation. Il verrouille l'interface utilisateur, etc. Personnellement, j'aime les implémentations de minuteur, car il attend puis se déclenche.
Utilisation: 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();
}
Fonction d'attente à l'aide de minuteries, pas de verrous d'interface utilisateur.
public void wait(int milliseconds)
{
System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
if (milliseconds == 0 || milliseconds < 0) return;
//Console.WriteLine("start wait timer");
timer1.Interval = milliseconds;
timer1.Enabled = true;
timer1.Start();
timer1.Tick += (s, e) =>
{
timer1.Enabled = false;
timer1.Stop();
//Console.WriteLine("stop wait timer");
};
while (timer1.Enabled)
{
Application.DoEvents();
}
}
Utilisation: il suffit de placer ceci dans votre code qui doit attendre:
wait(1000); //wait one second
Attendre ne sera pas un grave inconvénient s’il est court. Dans mon cas, il était nécessaire de donner un retour visuel à l'utilisateur en faisant clignoter un contrôle (il s'agit d'un contrôle graphique pouvant être copié dans le Presse-papiers, ce qui modifie son arrière-plan pendant quelques millisecondes). Cela fonctionne bien de cette façon:
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;
....
utilisez dataGridView1.Refresh();
:)
Essayez cette fonction
public void Wait(int time)
{
Thread thread = new Thread(delegate()
{
System.Threading.Thread.Sleep(time);
});
thread.Start();
while (thread.IsAlive)
Application.DoEvents();
}
Fonction d'appel
Wait(1000); // Wait for 1000ms = 1s
Je me sens comme si tout ce qui n'allait pas ici était la commande, Selçuklu souhaitait que l'application attende une seconde avant de remplir la grille. La commande Veille aurait donc dû arriver avant la commande de remplissage.
System.Threading.Thread.Sleep(1000);
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;