我目前正在使用单个计时器。此定时器设置为每两秒钟一次,它将切换到外壳开关中的下一个外壳。但是我现在希望能够将计时器设置为不同的秒数。我想有三到四个不同的值。 我知道我可以创建新的计时器,然后从中获取每个计时器的事件处理程序,但我不想在这里这样做。 有没有办法可以将单个计时器设置为不同的值? 我目前拥有的代码如下:
Clock = new Timer(2000);
Clock.Elapsed += Clock_Elapsed;
Clock.Enabled = true;
Clock.Start();
private void Clock_Elapsed(object sender, ElapsedEventArgs e)
{
switch (CurrentDevice)
{
case (Devices.WSS):
if (OurWSS.CurrentComponent != null)
{
OurRobot.LoadComponent(OurComponent);
OurWSS.UnLoad();
}
CurrentDevice = Devices.Robot
break;
case (Devices.Robot):
if (OurRobot.CurrentComponent != null)
{
OurMachine.LoadComponent(OurComponent);
OurRobot.UnLoad();
}
CurrentDevice = Devices.Machine;
break;
case (Devices.Machine):
if (OurMachine.CurrentComponent != null)
{
OurRobot.LoadComponent(OurComponent);
//OurComponent.GetCurrentOperation();
OurMachine.UnLoad();
}
CurrentDevice = Devices.RobotOut;
break;
case (Devices.RobotOut):
if (OurRobot.CurrentComponent != null)
{
OurWSS.LoadComponent(OurComponent);
OurRobot.UnLoad();
}
CurrentDevice = Devices.WSS;
break;
}
}
答案 0 :(得分:0)
您可以使用Clock.Interval = 3000
更改计时器的间隔。 Timer.Interval Property
此外,无需在Start()
之后调用Clock.Enabled = true;
方法,如果您查看Start()
实施,只需将Enabled
设置为true
}。
/// <devdoc>
/// <para>Starts the timing by setting <see cref='System.Timers.Timer.Enabled'/> to <see langword='true'/>.</para>
/// </devdoc>
public void Start() {
Enabled = true;
}
答案 1 :(得分:0)
您不能设置单个计时器来返回多个间隔,但如果您想要的间隔是某个单个值的倍数,则很容易忽略刻度,直到出现所需的间隔。
有很多种方法可以做到这一点。这是我在Unity游戏编程中使用的一个例子:想象你想要以1秒,5秒和10秒的间隔作出回应。首先,初始化包含当前时间加上1,5和10秒的3时隙阵列,并将计时器设置为1秒间隔。在每个timer-tick测试中,当前时间是否等于或大于每个插槽,如果为true,则执行相应的操作并将阵列插槽更新为该插槽间隔的下一个目标时间。
更新的目标时间可能相对于实际当前时间或相对于存储在插槽中的时间,具体取决于是否更接近于固定或相对间隔。
如果您要做很多事情,这也很容易被抽象为一个类。
答案 2 :(得分:0)
如果您将使用限制为乘以秒,您可以尝试创建一个计数器,在每个刻度中增加它,然后检查是否有时间执行方法:
long seconds;
private void Clock_Elapsed(object sender, ElapsedEventArgs e)
{
seconds++;
ExecAction1Second(); -- action taht executes every second
if (seconds % 2 == 0)
ExecAction2Seconds(); -- action taht executes every 2 seconds
if (seconds % 3 == 0)
ExecAction3Seconds(); -- action taht executes every 3 seconds
}