c# - Visual Studio C# 使用计时器将程序按住 1 小时
问题描述
我是新用户,我希望添加一个计时器来按住程序一小时然后继续。
这是程序:
- 通过串口发出命令,例如高
- 坚持一个小时
- 再次发出相同的命令“高”
- 坚持一个小时
- 它一直重复,直到按下按钮。
我应该如何实现计时器?因为我尝试在网上搜索并找到了一些示例。我将其包含在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()
时,程序将永远运行。
解决方案
这将起作用,但有时在您关闭程序时可能会崩溃,因为 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
}
推荐阅读
- javascript - maxFontSizeMultiplier 道具全部
- python - 如何在 Google Drive 上强制使用唯一的文件名?
- c# - 如何在不使用循环声明方式的情况下仅获取纯记录
- javascript - 改变句子中的字母?
- json - 使用 python 为存储在列表中的值生成 JSON 报告
- python - 替换所有高于阈值的 rgb 值
- oracle-sqldeveloper - 可插拔数据库deos不存在
- javascript - 为什么我会收到数组中元素的“未捕获的类型错误:无法读取 null 的属性 'style'”?
- react-native - 更新库后反应导航问题与性能
- c++ - 如何修复 MPI_Send 中的“地址未映射”?