c# - C#中的定时器问题

标签 c# .net winforms timer

我在我的项目中使用了两个 System.Windows.Forms.Timer 对象,如下所示。

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Interval = 60000;
    timer2.Interval = 62000;
    timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    Console.WriteLine("Timer1 :" + DateTime.Now.ToString());
    timer2.Start();
}

private void timer2_Tick(object sender, EventArgs e)
{  
    Console.WriteLine("Timer2 :" + DateTime.Now.ToString());
    timer2.Stop();
}

输出结果为:

Timer1 :05/30/2011 12:15:57 AM      (12:16:59)
Timer1 :05/30/2011 12:16:57 AM      (12:17:59) miss
Timer2 :05/30/2011 12:16:59 AM      

Timer1 :05/30/2011 12:17:57 AM      (12:18:59)
Timer1 :05/30/2011 12:18:57 AM      (12:19:59) miss
Timer2 :05/30/2011 12:18:59 AM

Timer1 :05/30/2011 12:19:57 AM      (12:20:59)
Timer1 :05/30/2011 12:20:57 AM      (12:21:59) miss
Timer2 :05/30/2011 12:20:59 AM

我不明白为什么 timer2 的 timer1 的每秒钟都丢失了。

我的意思是 Timer2 应该在 12:17:59 开始,而 Timer1 应该在 12:16:57 AM 开始。

我怎样才能改变它以获得正确的算法?

最佳答案

我不确定您为什么要这样做,但它按您设计的那样工作。当 timer1 计时时,它输出一条消息并打开 timer2。然后 timer1 再次滴答作响,但 timer2 已经打开,所以那里什么也没有发生。然后 timer2 滴答作响并关闭。这就是为什么每个 timer2 都有两个 timer1。当您第二次尝试打开它时,Timer2 已经在运行。

如果你真的想让它正常工作,你可能需要添加第三个计时器,然后在两者之间交替。检查 timer2 是否正在运行,如果是,则启动 timer3。否则启动 timer2。

关于c# - C#中的定时器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169110/

相关文章:

c# - 允许服务之间的通信?

.net - 如何正确修改生成的XSD以克服导致异常 "cs0030:Unable to generate a temporary class"的已知.Net错误

c# - .NET Winforms 应用程序在启动时死掉

c# - 根据组合框中的选定项目获取文件名

c# - 打开一个已经在使用中的文件

c# - 使用外部文件设置窗体的背景图像 - Windows 窗体

c# - 检测没有子项的 mdiContainer 上的双击(c# winforms)

c# - 将 System.Net.mail.MailMessage 保存为 .msg 文件

c# - Windows 服务未从 App.config 获取值

c# - C#中获取RFC功能模块参数