如何延迟循环周期?
Posted
技术标签:
【中文标题】如何延迟循环周期?【英文标题】:How to delay for loop cycles? 【发布时间】:2014-09-02 13:55:39 【问题描述】:我有一个 for 循环,我在其中计算某些东西的值并显示它,例如
void Button_Click(object sender, RoutedEventArgs e)
InitializeComponent();
Random rand = new Random();
for (i = 0; i <= 30; i++)
rnd = rand.Next(1,10);
value += i + rnd;
display.Content = value;
问题是,我想看到每个周期后被覆盖的值,延迟 X 秒,我怎么能在 WPF 中实现呢?
【问题讨论】:
看看DispatcherTimer类。 只是延迟?在线程池调用(或任务)中休眠,然后分派到主线程进行更新。重复?调度的计时器。 我试过 Thread.Sleep(),但它会停止整个线程,然后完成整个循环。 Task.Delay() 效果很好,谢谢 【参考方案1】:使用Task.Delay
在一段时间后执行一些代码。
private async void Button_Click(object sender, RoutedEventArgs e)
InitializeComponent();
Random rand = new Random();
for (i = 0; i <= 30; i++)
rnd = rand.Next(1,10);
value += i + rnd;
display.Content = value;
await Task.Delay(Timespan.FromSeconds(1));
【讨论】:
我有一个关于从async
方法返回 void
的警告标志。
@Jodrell,这是 async void (异步事件处理程序)的预期用例,但是是的,OP 最终从该事件中分离出返回 Task 的异步方法是个好主意处理程序。在 OP 学习期间,这仍然是一个很好的简单解决方案。
@Jodrell 这是事件的事件处理程序。这种确切的情况实际上正是他们首先使 async void
合法的原因。
经过研究我同意***.com/questions/19415646/…
@Servy,正如对 Jodrell 链接的问题的回答中所述,主要好处是将逻辑与事件处理程序隔离开来(如果最终转移到 MVVM 模式,则很可能在视图模型中),它允许进行单元测试。 Task 实例还可用于在稍后有意义的特定时间点显式处理异常。目前对 OP 的担忧并不紧迫,但值得在未来考虑。以上是关于如何延迟循环周期?的主要内容,如果未能解决你的问题,请参考以下文章
Verilog中想要让某个项延迟几个时钟周期,最好的办法是啥