首页 > 解决方案 > Visual Studio C# 使用计时器将程序按住 1 小时

问题描述

我是新用户,我希望添加一个计时器来按住程序一小时然后继续。

这是程序:

  1. 通过串口发出命令,例如高
  2. 坚持一个小时
  3. 再次发出相同的命令“高”
  4. 坚持一个小时
  5. 它一直重复,直到按下按钮。

我应该如何实现计时器?因为我尝试在网上搜索并找到了一些示例。我将其包含在Form1.cs

static System.Timers.Timer Timer1;
void button1_Click(object sender, EventArgs e)
{
     Timer1 = new System.Timers.Timer(60*60*1000);
     Timer1.Elapsed += new ElapsedEventHandler(TimedEvent);
     Timer1.Enabled = true;
}
private void TimedEvent(Object source, ElapsedEventArgs e)
{
     serialPort1.Write("high");
}

尽管此代码有助于每小时重复一次高点,但它仅在 60 分钟后执行 TimedEvent。我需要先写入串口,然后执行定时器。如何修改代码以达到我想要的结果?

编辑:我意识到这段代码不起作用,因为计时器没有保持一个小时。而是将其放在 form1_load 中工作。

        private void Form1_Load(object sender, EventArgs e)
        {
            Timer1 = new System.Timers.Timer(10*1000); 
            Timer1.Elapsed += TimedEvent;
        }

试过这个(下),但计时器不起作用

static System.Windows.Forms.Timer timer4 = new System.Windows.Forms.Timer();
void button1_Click(object sender, EventArgs e)
    {
         Writetoserialport();
         timer4.Interval = 10000; // testing on 10second interval
         timer4.Enabled = true;
    }

当我删除Writetoserialport()时,程序将永远运行。

标签: c#visual-studio-2010timer

解决方案


这将起作用,但有时在您关闭程序时可能会崩溃,因为 System.Timers.Timer 在 ThreadPool 线程上触发 TimedEvent。有时可能会发生的情况是,当您的程序关闭时,SerialPort 对象将被释放,但由于 Timer 仍在另一个线程上执行,它将触发 TimedEvent 并尝试写入 serialPort 但它会使程序崩溃,因为它将被处置。

您应该查看 System.Windows.Forms.Timer ,它旨在与这样的 GUI 线程一起使用。

// INSTEAD, TRY THIS. 

// 太晚了,上面复制粘贴后忘记改一些代码了,现在应该好了。

    static System.Windows.Forms.Timer timer1;
    void button1_Click(object sender, EventArgs e)
    {
             timer1 = new System.Windows.Forms.Timer(60*60*1000);
             timer1.Tick += Timer1_Tick;
             timer1.Enabled = true;
             WriteToSerialPort(); // Call method directly for writing to port.
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
             WriteToSerialPort(); 
    }

    private void WriteToSerialPort()
    {
             serialPort1.Write("high"); // write to port
    }

推荐阅读