Подождите одну секунду в запущенной программе - программирование
Подтвердить что ты не робот

Подождите одну секунду в запущенной программе

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

Я хочу подождать одну секунду, прежде чем печатать ячейки сетки с помощью этого кода, но он не работает. Что я могу сделать?

4b9b3361

Ответ 1

Это пауза, но вы не видите, что ваш красный цвет появляется в ячейке? Попробуйте следующее:

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

Ответ 2

Лично я думаю, что 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();
}

Ответ 3

Функция ожидания с использованием таймеров, без блокировок пользовательского интерфейса.

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

Ответ 4

Ожидание занятости не будет серьезным недостатком, если он короткий. В моем случае возникла необходимость дать визуальную обратную связь пользователю, сверкнув элемент управления (это элемент управления диаграммой, который можно скопировать в буфер обмена, который меняет фон на несколько миллисекунд). Он отлично работает:

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;
....

Ответ 5

использовать dataGridView1.Refresh();:)

Ответ 6

Попробуйте эту функцию

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

Ответ 7

Я чувствую, что все, что здесь было не так - это приказ. Сельчуклу хотел, чтобы приложение подождало секунду, прежде чем заполнять сетку, поэтому команда "Сон" должна была прийти перед командой "Заполнить".

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

Ответ 8

Может быть, попробуйте этот код:

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

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