等待直到一个计时器用完并执行另一个计时器

本文关键字:计时器 另一个 执行 一个 等待 | 更新日期: 2023-09-27 18:17:54

我长话短说。我基本上需要一种方法来获取一个计时器,检查计时器何时启动并在它结束时执行一些操作,然后循环它。例如(这段代码并不严肃,只是示例代码):

Timer1.start();
If (timer1.TimeRanOut) {
Timer2.start()
}

或者其他方法来暂停计时器而不冻结GUI(我将以快速的速度运行一些东西,冻结会妨碍)。我将通过循环整个过程使其变得更复杂,例如:

if (Checkbox1.checked == true; )
{
Timer1.start();
Next If (timer1.TimeRanOut) {
Timer2.start()
}
Next If (timer2.TimeRanOut) {
Timer3.start()
}

以此类推。有解决方案吗?

等待直到一个计时器用完并执行另一个计时器

我建议使用任务。设置一个任务去做一些事情(它可以只等待X秒,这是一个计时器),而不是设置continueWith来分配一个新任务,让它在第一个任务完成时运行。你可以在这里读到更多:http://msdn.microsoft.com/en-us/library/dd537612.aspx

顺便说一下,你真的不应该在UI线程本身上运行大量的计算。如果你决定使用任务-这将是好的。否则,您需要创建后台线程并在那里完成工作。 编辑:

在OP的一些澄清之后,我将尝试解释UI和后台线程的基础知识:当你运行一个winforms/WPF应用程序时,所有的用户界面事件都在一个线程中处理——UI线程。它遍历所有事件并对其进行处理。如果长时间的计算占用了这个线程,UI将变得"卡住"并且没有响应。看到的:UI在大量计算时冻结

这就是为什么,任何长计算应该在后台的另一个线程上完成。在上面帖子的答案中有一个如何做到这一点的例子。

您可以使用System.Threading.Timer。然后,您将利用它的单次射击功能(请参阅更改方法)。这样你就可以将多个计时器连接起来。

这个计时器的回调在线程池上运行,所以你的UI不会冻结。