我会做得很简短。我基本上需要一种方法,我可以采取计时器,检查计时器何时启动并在其结束时执行某些操作,然后循环它。例如(此代码并不严重,只是示例代码):
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()
}
等等。有解决方案吗
答案 0 :(得分:0)
我会建议使用任务。你设置一个任务来做某事(它可以等待X秒,而不是一个计时器),而不是设置continueWith来指定一个新任务在第一个被完成时运行。 你可以在这里阅读更多相关信息: http://msdn.microsoft.com/en-us/library/dd537612.aspx
顺便说一下,你真的不应该在UI线程本身上运行繁重的计算。 如果你决定使用任务 - 那没关系。否则,您需要创建后台线程并在那里完成工作。
修改强>
在OP的一些澄清之后,我将尝试解释基础知识或使用UI和后台线程: 当您运行winforms / WPF应用程序时,所有用户界面事件都在一个线程中处理 - UI线程。它遍历所有事件并处理它们。 如果长计算占用此线程,则UI将变得“卡住”并且响应。看到: UI freezes on heavy calculation
这就是为什么,任何长时间的计算应该在后台的另一个线程上进行。 在上面的帖子中,有一个关于如何做到这一点的例子。
答案 1 :(得分:0)
您可以使用System.Threading.Timer。然后,您将使用其单次拍摄功能(请参阅更改方法)。这样你可以链接几个计时器。
此计时器的回调在线程池上运行,因此您的UI不会冻结。