dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
System.Threading.Thread.Sleep(1000);
我希望在使用此代码打印网格单元格之前等待一秒钟,但它无法正常工作。我该怎么办?
答案 0 :(得分:125)
是否暂停,但您没有看到单元格中出现红色?试试这个:
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
dataGridView1.Refresh();
System.Threading.Thread.Sleep(1000);
答案 1 :(得分:26)
我个人认为Thread.Sleep
实施效果不佳。它锁定了UI等。我个人喜欢定时器实现,因为它等待然后触发。
用法: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();
}
答案 2 :(得分:8)
使用计时器等待功能,没有UI锁定。
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
答案 3 :(得分:2)
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;
....
答案 4 :(得分:1)
使用dataGridView1.Refresh();
:)
答案 5 :(得分:1)
等待而不冻结主线程的最佳方法是使用Task.Delay函数。
因此您的代码将如下所示
var t = Task.Run(async delegate
{
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
dataGridView1.Refresh();
await Task.Delay(1000);
});
答案 6 :(得分:0)
尝试此功能
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 :(得分:0)
我觉得这里的所有错误就是命令,Selçuklu希望应用程序在填充网格之前等待一秒钟,因此,Sleep命令应该早于fill命令。
System.Threading.Thread.Sleep(1000);
dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
答案 8 :(得分:0)
.Net Core似乎缺少cabal
。
如果可以使用异步方法,则DispatcherTimer
将满足我们的需求。如果出于速率限制的原因要在for循环内等待,这也很有用。
Task.Delay
您可以按照以下步骤等待此方法的完成:
public async Task DoTasks(List<Items> items)
{
foreach (var item in items)
{
await Task.Delay(2 * 1000);
DoWork(item);
}
}
答案 9 :(得分:-4)
也许试试这段代码:
void wait (double x) {
DateTime t = DateTime.Now;
DateTime tf = DateTime.Now.AddSeconds(x);
while (t < tf) {
t = DateTime.Now;
}
}