哪种方式更好,以及如何将参数传递给windows.forms.timer

时间:2013-05-27 18:23:38

标签: c# .net winforms timer multitasking

我想要实现以下目标:

我在计时器内有很多“检查(如果/等等)”,他的间隔是1000毫秒,

有一个文本文件更新,计时器每1000毫秒读取一次并检查一些特定的更改,

在其中一个条件下,如果计时器为真,我需要等待10秒然后再读取另一个文本文件,然后继续使用其余的计时器代码。

但同时计时器在这10秒内保持运行,并且每1秒对所有其他条件进行检查,这也是1。

我的想法是什么

如果我想要的条件为真,我将以10秒的间隔启动一个新的计时器,它将继续使用该特定部分的代码。

但是我很难完成的是如何将参数传递给该计时器

,例如

newTimer.Start(int "parameter", string "parameter b", list<string> parameters c")

等等

如果您有任何其他想法,我会很高兴听到。

2 个答案:

答案 0 :(得分:0)

要传递参数,您始终可以使用Tuple

newTimer.Start(Tuple.Create(param1, param2, param3));

如果正确执行逻辑,则可能不需要两个计时器。

Timer *run every second*
    Check file

    If file has flag Then save in variable the current date + 10 seconds

    If current date > saved date Then Check the other file

答案 1 :(得分:0)

您需要考虑System.Windows.Forms.Timer将在GUI线程(运行包含表单的消息循环/泵的线程)上运行,因为它使用由GUI线程处理的窗口消息(WM_TIMER)。因此,任何在表单中任何System.Windows.Forms.Timer下运行的代码都将同步执行。因此,如果您启动一个新的System.Windows.Forms.Timer会阻塞10秒,那么所有其他计时器也会被阻止(因为阻止了消息循环)。

考虑使用System.Threading.TimerSystem.Timers.Timer,因为它们在不同的线程上运行计时器回调。通过这种方式,您的代码将按照您的需要运行 - 每隔一秒钟该方法将运行,无论前一个调用完成或仍然阻塞(等待10秒)的天气。