C# C系统定时器定时器自动关机?
我有一个计时器,它会启动并在它自己的线程中无限期地执行它的工作,直到主线程中发生了什么事情来禁用它,在这种情况下,将启用另一个计时器。这很好用。唯一的问题是,我想完全确保第二个计时器不会运行太长时间 如果定时器由于某些故障没有收到特定的关机命令,有没有办法让定时器在10分钟后自动禁用 我看到这个类有一个方法。听起来好像有帮助,但我不知道怎么做C# C系统定时器定时器自动关机?,c#,multithreading,visual-studio,timer,C#,Multithreading,Visual Studio,Timer,我有一个计时器,它会启动并在它自己的线程中无限期地执行它的工作,直到主线程中发生了什么事情来禁用它,在这种情况下,将启用另一个计时器。这很好用。唯一的问题是,我想完全确保第二个计时器不会运行太长时间 如果定时器由于某些故障没有收到特定的关机命令,有没有办法让定时器在10分钟后自动禁用 我看到这个类有一个方法。听起来好像有帮助,但我不知道怎么做 感谢各位朋友:为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答一次检查变量,一旦var达到600,就让计时器自行禁用
感谢各位朋友:为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答一次检查变量,一旦var达到600,就让计时器自行禁用。为什么不让它在每次迭代时为全局变量加一个+1,比如说如果它每秒滴答一次,让计时器每滴答地检查一次变量,一旦变量达到600,告诉计时器禁用自身。只要声明一个类变量,并在启动计时器时将其设置为DateTime.Now。然后将其包含在计时器中:
DateTime time = DateTime.Now;
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0)
{
timer1.Stop();
}
// timer code
}
只需声明一个类变量,并在启动计时器时将其设置为DateTime.Now。然后将其包含在计时器中:
DateTime time = DateTime.Now;
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Compare(DateTime.Now, time.AddMinutes(10)) > 0)
{
timer1.Stop();
}
// timer code
}
当你启动第二个定时器以在给定时间后禁用它时,你可以考虑启动一个第三定时器。
Timer t1 = new Timer(1000); // fire every second
Timer t2 = new Timer(60000); // fire after 10 minutes
t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed
t1.Start();
t2.Start();
上面的示例顺便说一句,使用System.Timers.Timer。如果你正在使用Studio.thordime.TimeTime:你可能会考虑在那里进行切换,因为系统足够惊人。定时器是一个本质上是线程安全的系统,TycRead。定时器不是。< /P>
在这里可以找到相当好的概述:
为清晰起见,请编辑:
线路
也可以写成
t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);
接
void t2_Elapsed(object sender, ElapsedEventArgs e)
{
t1.Stop();
}
这是你在VisualStudio中命中Ctrl +空间时所得到的,因为你可以在较低的方法中访问T1。
< P>你可以考虑在启动第二个定时器后在给定的时间内禁用第三定时器。 Timer t1 = new Timer(1000); // fire every second
Timer t2 = new Timer(60000); // fire after 10 minutes
t2.Elapsed += (o, e) => t1.Stop(); // disable timer 1 when timer 2 is elapsed
t1.Start();
t2.Start();
上面的示例顺便说一句,使用System.Timers.Timer。如果你正在使用Studio.thordime.TimeTime:你可能会考虑在那里进行切换,因为系统足够惊人。定时器是一个本质上是线程安全的系统,TycRead。定时器不是。< /P>
在这里可以找到相当好的概述:
为清晰起见,请编辑:
线路
也可以写成
t2.Elapsed += new ElapsedEventHandler(t2_Elapsed);
接
void t2_Elapsed(object sender, ElapsedEventArgs e)
{
t1.Stop();
}
这就是在Visual Studio中按Ctrl+Space时实际得到的结果,前提是您可以在下面的方法中访问t1。指定已用事件处理程序和全局布尔值
Private Boolean eOccured = False;
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 600000; //milliseconds(10 min)
aTimer.Enabled = True;
。。。
如果成功,代码将激活bool
然后在事件触发器上停止计时器
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
If (eOccured)
{
aTimer.Stop();
}
}
分配已用事件处理程序和全局布尔值
Private Boolean eOccured = False;
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 600000; //milliseconds(10 min)
aTimer.Enabled = True;
。。。
如果成功,代码将激活bool
然后在事件触发器上停止计时器
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
If (eOccured)
{
aTimer.Stop();
}
}
你能把第3行中的语法仔细琢磨一下吗?我不确定我是否理解它是如何工作的。你能把第3行中的语法琢磨清楚吗?我不确定我是否理解它是如何工作的。