Лично я считаю, что Thread.Sleepэто плохая реализация. Он блокирует пользовательский интерфейс и т. Д. Мне лично нравятся реализации таймера, так как он ждет, а затем срабатывает.
Использование: DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));
//Note Forms.Timer and Timer() have similar implementations. publicstaticvoidDelayAction(int millisecond,Action action){var timer =newDispatcherTimer();
timer.Tick+=delegate{
action.Invoke();
timer.Stop();};
timer.Interval=TimeSpan.FromMilliseconds(millisecond);
timer.Start();}
Просто предложение. Если вы умножите мин на 60000, имя параметра будет более значимым. timer1.Interval = min * 60000;
Golda
Да, вы правы, вместо мин должны быть миллисекунды. Я обновлю название. Спасибо
Сказано
3
Я чувствую, что все, что здесь было не так, это порядок, Сельчуклу хотел, чтобы приложение подождало секунду перед заполнением сетки, поэтому команда Sleep должна была быть перед командой заполнения.
Ожидание не будет серьезным недостатком, если оно короткое. В моем случае возникла необходимость предоставить пользователю визуальную обратную связь путем мигания элемента управления (это элемент управления диаграммой, который можно скопировать в буфер обмена, который меняет свой фон на несколько миллисекунд). Он отлично работает так:
using System.Threading;...Clipboard.SetImage(bm);// some code
distribution_chart.BackColor=Color.Gray;Application.DoEvents();// ensure repaint, may be not neededThread.Sleep(50);
distribution_chart.BackColor=Color.OldLace;....
Если у нас все в порядке с использованием асинхронного метода, Task.Delayэто удовлетворит наши потребности. Это также может быть полезно, если вы хотите подождать внутри цикла for по причинам ограничения скорости.
publicasyncTaskDoTasks(List<Items> items){foreach(var item in items){awaitTask.Delay(2*1000);DoWork(item);}}
Вы можете дождаться завершения этого метода следующим образом:
Лучший способ подождать, не замораживая основной поток, - использовать функцию Task.Delay .
Итак, ваш код будет выглядеть так
var t =Task.Run(asyncdelegate{
dataGridView1.Rows[x1].Cells[y1].Style.BackColor=System.Drawing.Color.Red;
dataGridView1.Refresh();awaitTask.Delay(1000);});
Это верное решение. Тем не менее, вы должны добавить описание его преимуществ и недостатков, например упомянуть, что, поскольку это решение с ожиданием занятости, оно будет занимать процессорное время.
Ответы:
Это приостановлено, но вы не видите, что ваш красный цвет отображается в ячейке? Попробуй это:
источник
Лично я считаю, что
Thread.Sleep
это плохая реализация. Он блокирует пользовательский интерфейс и т. Д. Мне лично нравятся реализации таймера, так как он ждет, а затем срабатывает.Использование:
DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));
источник
Функция ожидания с использованием таймеров, без блокировок пользовательского интерфейса.
Использование: просто поместите это в свой код, который нужно подождать:
источник
Я чувствую, что все, что здесь было не так, это порядок, Сельчуклу хотел, чтобы приложение подождало секунду перед заполнением сетки, поэтому команда Sleep должна была быть перед командой заполнения.
источник
Ожидание не будет серьезным недостатком, если оно короткое. В моем случае возникла необходимость предоставить пользователю визуальную обратную связь путем мигания элемента управления (это элемент управления диаграммой, который можно скопировать в буфер обмена, который меняет свой фон на несколько миллисекунд). Он отлично работает так:
источник
.Net Core, похоже, не хватает
DispatcherTimer
.Если у нас все в порядке с использованием асинхронного метода,
Task.Delay
это удовлетворит наши потребности. Это также может быть полезно, если вы хотите подождать внутри цикла for по причинам ограничения скорости.Вы можете дождаться завершения этого метода следующим образом:
источник
использовать
dataGridView1.Refresh();
:)источник
Попробуйте эту функцию
Функция вызова
источник
Лучший способ подождать, не замораживая основной поток, - использовать функцию Task.Delay .
Итак, ваш код будет выглядеть так
источник
Возможно, попробуйте этот код:
источник