dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
System.Threading.Thread.Sleep(1000);
Я хочу подождать одну секунду, прежде чем печатать ячейки сетки с помощью этого кода, но он не работает. Что я могу сделать?
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
System.Threading.Thread.Sleep(1000);
Я хочу подождать одну секунду, прежде чем печатать ячейки сетки с помощью этого кода, но он не работает. Что я могу сделать?
Это пауза, но вы не видите, что ваш красный цвет появляется в ячейке? Попробуйте следующее:
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
dataGridView1.Refresh();
System.Threading.Thread.Sleep(1000);
Лично я думаю, что Thread.Sleep
- это плохая реализация. Он блокирует пользовательский интерфейс и т.д. Мне лично нравятся реализации таймера, так как он ждет, затем срабатывает.
Использование: 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();
}
Функция ожидания с использованием таймеров, без блокировок пользовательского интерфейса.
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();
}
}
Использование: просто поместив это в ваш код, который нужно подождать:
wait(1000); //wait one second
Ожидание занятости не будет серьезным недостатком, если он короткий. В моем случае возникла необходимость дать визуальную обратную связь пользователю, сверкнув элемент управления (это элемент управления диаграммой, который можно скопировать в буфер обмена, который меняет фон на несколько миллисекунд). Он отлично работает:
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;
....
использовать dataGridView1.Refresh();
:)
Попробуйте эту функцию
public void Wait(int time)
{
Thread thread = new Thread(delegate()
{
System.Threading.Thread.Sleep(time);
});
thread.Start();
while (thread.IsAlive)
Application.DoEvents();
}
Функция вызова
Wait(1000); // Wait for 1000ms = 1s
Я чувствую, что все, что здесь было не так - это приказ. Сельчуклу хотел, чтобы приложение подождало секунду, прежде чем заполнять сетку, поэтому команда "Сон" должна была прийти перед командой "Заполнить".
System.Threading.Thread.Sleep(1000);
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
Может быть, попробуйте этот код:
void wait (double x) {
DateTime t = DateTime.Now;
DateTime tf = DateTime.Now.AddSeconds(x);
while (t < tf) {
t = DateTime.Now;
}
}