0

我想完成以下事情:

我在计时器中有很多“检查(if/else if etc)”,他的间隔是 1000 毫秒,

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

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

但与此同时,计时器在这 10 秒内继续运行,并每隔 1 秒对所有其他条件和这 1 个条件进行检查。

我想做什么

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

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

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

等等等等

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

4

2 回答 2

0

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

考虑使用System.Threading.Timeror System.Timers.Timer,因为它们在不同的线程上运行计时器回调。这样,您的代码将几乎按照您的意愿运行 - 方法将运行的每一秒,无论天气如何,上一个调用已完成或仍在阻塞(等待 10 秒)。

于 2013-05-27T18:38:43.213 回答
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
于 2013-05-27T18:29:22.067 回答