0

我会很简短,直截了当。我基本上需要一种可以使用计时器的方法,检查计时器何时启动并在其结束时执行某些操作,然后循环它。例如(此代码不严重,只是示例代码):

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()

}

等等。有什么解决办法吗?

4

2 回答 2

0

我建议使用 Tasks。你设置了一个任务来做某事(它可以等待 X 秒,而不是一个计时器),而不是你设置 continueWith 来分配一个新任务以在第一个任务完成时运行。您可以在此处阅读有关此内容的更多信息:http: //msdn.microsoft.com/en-us/library/dd537612.aspx

顺便说一句,你真的不应该在 UI 线程本身上运行繁重的计算。如果您决定使用任务 - 那很好。否则,您需要创建后台线程并在那里完成工作。

编辑:

在 OP 进行了一些澄清之后,我将尝试解释基础知识或使用 UI 和后台线程:当您运行 winforms/WPF 应用程序时,所有用户界面事件都在单个线程中处理 - UI 线程。它遍历所有事件并处理它们。如果长时间计算占用该线程,UI 将变得“卡住”并且没有响应。请参阅: UI 因繁重计算而冻结

这就是为什么任何长时间的计算都应该在后台的另一个线程上完成。在上述帖子的答案中,有一个关于如何执行此操作的示例。

于 2013-06-12T04:26:09.097 回答
0

您可以使用System.Threading.Timer。然后,您将利用其单发功能(请参阅更改方法)。这样你可以链接几个计时器。

此计时器的回调在线程池上运行,因此您的 UI 不会冻结。

于 2013-06-12T07:20:09.187 回答